Andrea Cosentino created CAMEL-24439:
----------------------------------------

             Summary: camel-shiro - presented password is not verified when the 
thread subject already matches the username
                 Key: CAMEL-24439
                 URL: https://issues.apache.org/jira/browse/CAMEL-24439
             Project: Camel
          Issue Type: Bug
          Components: camel-shiro
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino
             Fix For: 4.23.0


{{ShiroSecurityProcessor.authenticateUser()}}:

{code:java}
boolean authenticated = currentUser.isAuthenticated();
boolean sameUser = 
securityToken.getUsername().equals(currentUser.getPrincipal());

if (!authenticated || !sameUser) {
    UsernamePasswordToken token = new 
UsernamePasswordToken(securityToken.getUsername(), securityToken.getPassword());
    ...
    currentUser.login(token);
}
{code}

{{login()}} - and therefore the credential check - runs only when the 
thread-bound Shiro subject is not already authenticated for the same username. 
When it is, the password carried by the incoming {{ShiroSecurityToken}} is 
never verified: the method treats "same principal name" as "same credentials".

{{alwaysReauthenticate}} defaults to {{true}} and the processor calls 
{{logout()}} in a {{finally}} block, which hides the issue in the default 
configuration. But {{alwaysReauthenticate=false}} is a documented option, and 
in that mode the token is created with {{setRememberMe(true)}}, deliberately 
making subjects long-lived on Camel's shared worker threads - which is exactly 
when the skip can trigger.

Proposal: always call {{login()}} with the presented token, or compare the 
presented credentials rather than only the principal name before deciding to 
skip. The username comparison also uses {{Object.equals}} against 
{{getPrincipal()}}, which is not necessarily a String.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to