Expected Behavior
Reviewing this library, noticed that the method equalsConstantTime wasn't adopted everywhere.
https://github.com/spring-projects/spring-security/blob/3b447b938cfcb82e31e1bb744ff59ce52427749b/web/src/main/java/org/springframework/security/web/csrf/CsrfFilter.java#L122
Locations where they are not adopted yet
https://github.com/spring-projects/spring-security/blob/3b447b938cfcb82e31e1bb744ff59ce52427749b/core/src/main/java/org/springframework/security/authentication/AbstractAuthenticationToken.java#L141-L142
Below is a cpgql query that could be used to identify the locations with joern (joern.io)
cpg.call("equals").where(_.argument(1).code(".*((?i)cred|pass|token|secret).*")).location.map(l => (l.className, l.filename, l.lineNumber, l.node)).l
joern> cpg.call("equals").where(_.argument(1).code(".*((?i)cred|pass|token|secret).*")).location.map(l => (l.className, l.filename, l.lineNumber, l.node)).l
res83: List[(String, String, Option[Integer], Option[AbstractNode])] = List(
(
"org.springframework.security.web.authentication.www.DigestAuthenticationFilter$DigestData",
"/Volumes/Work/threatr/spring-security/web/src/main/java/org/springframework/security/web/authentication/www/DigestAuthenticationFilter.java",
Some(value = 397),
Some(
value = Call(
id = 11568L,
argumentIndex = 1,
argumentName = None,
code = "expectedNonceSignature.equals(nonceTokens[1])",
columnNumber = Some(value = 9),
dispatchType = "DYNAMIC_DISPATCH",
dynamicTypeHintFullName = ArraySeq(),
lineNumber = Some(value = 397),
methodFullName = "java.lang.String.equals:boolean(java.lang.Object)",
name = "equals",
order = 1,
signature = "boolean(java.lang.Object)",
typeFullName = "boolean"
)
)
),
(
"org.springframework.security.crypto.password.LdapShaPasswordEncoder",
"/Volumes/Work/threatr/spring-security/crypto/src/main/java/org/springframework/security/crypto/password/LdapShaPasswordEncoder.java",
Some(value = 150),
Some(
value = Call(
id = 43131L,
argumentIndex = 1,
argumentName = None,
code = "PasswordEncoderUtils.equals(encodedPassword, rawPassword)",
columnNumber = Some(value = 11),
dispatchType = "STATIC_DISPATCH",
dynamicTypeHintFullName = ArraySeq(),
lineNumber = Some(value = 150),
methodFullName = "org.springframework.security.crypto.password.PasswordEncoderUtils.equals:boolean(java.lang.String,java.lang.String)",
name = "equals",
order = 1,
signature = "boolean(java.lang.String,java.lang.String)",
typeFullName = "boolean"
)
)
),
...
Current Behavior
equals method is used for comparing tokens and passwords.
Context
Secure coding.