[ https://issues.apache.org/jira/browse/WSS-66?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Colm O hEigeartaigh updated WSS-66: ----------------------------------- Attachment: wss4j_wss66_revised.patch Please see the attached for a (revised) patch for this problem. The original patch has two issues: 1) No tests are included 2) The patch assumes that the processor should reject a UsernameToken if it is missing either a Nonce or a Created element, but not if both are missing. As this is a separate issue to the JIRA task in hand, it is more suitable that a separate JIRA be created for this. In the meantime, it's better to stick with the status quo, which incidentally conforms to the "recommended" approach in the 1.1 spec - which is to reject an incoming UsernameToken with digested password unless it has both Nonce and Created elements. The revised patch fixes the (major) security hole in question + adds tests. > Possible security hole when PasswordDigest is used by client. > ------------------------------------------------------------- > > Key: WSS-66 > URL: https://issues.apache.org/jira/browse/WSS-66 > Project: WSS4J > Issue Type: Bug > Environment: Any > Reporter: Ever A. Olano > Attachments: wss-66.diff, wss4j_wss66_revised.patch > > > Hello. I am trying to implement UsernameToken verification on the server > side and discovered what could be a security hole in the way the code > determines whether to verify the PasswordDigest. > According to the Username Token Profile 1.0 spec, the nonce and timestamp are > OPTIONAL. However, in UsernameTokenProcessor.java, you verify the password > digest only if both nonce and timestamp are non-null: > if (nonce != null && createdTime != null) { > String passDigest = UsernameToken.doPasswordDigest(nonce, > createdTime, origPassword); > if (!passDigest.equals(password)) { > throw new > WSSecurityException(WSSecurityException.FAILED_AUTHENTICATION); > } > } > So, if a client sends in PasswordDigest without a nonce or a timestamp, you > will set the usage to USERNAME_TOKEN, so the password callback handler will > simply set the password (since it's not expected to validate it itself). > Then, coming back to UsernameTokenProcessor, the code sees that one of nonce > and createdTime is null so it doesn't do the validation. > In other words, unless I missed something in the code, a client can send in > any bogus password, use PasswordDigest, NOT send in a nonce or a timestamp, > and it will validate just fine. > I'm sorry I can't test that scenario at this time as I haven't found a way to > turn off either the nonce or timestamp from .NET WSE 2.0, the toolkit I'm > testing with at this point. > Thanks, > Ever -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]