Skip to content

Improve signature validation#3998

Merged
duanemay merged 2 commits into
developfrom
signature_validation
Jul 25, 2026
Merged

Improve signature validation#3998
duanemay merged 2 commits into
developfrom
signature_validation

Conversation

@duanemay

Copy link
Copy Markdown
Member

No description provided.

Copilot AI review requested due to automatic review settings July 24, 2026 21:56

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR tightens signature/password comparison logic by switching to constant-time equality checks to reduce timing side-channel leakage during HMAC/JWT verification and LDAP password comparison.

Changes:

  • Use MessageDigest.isEqual(...) for constant-time comparisons in multiple authentication/signature validation paths.
  • Harden signed_request claim extraction to reject missing/unknown signing algorithms.
  • Decode and compare HMAC/JWT signatures as bytes rather than using String.equals(...).

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

File Description
server/src/main/java/org/cloudfoundry/identity/uaa/provider/oauth/ExternalOAuthAuthenticationManager.java Tightens signed_request algorithm enforcement and uses constant-time signature comparison (but introduces a Java compilation issue).
server/src/main/java/org/cloudfoundry/identity/uaa/provider/ldap/PasswordComparisonAuthenticator.java Replaces Arrays.equals with constant-time comparison for local LDAP password byte checks (leaves an unused import).
server/src/main/java/org/cloudfoundry/identity/uaa/oauth/jwt/UaaMacSigner.java Uses constant-time comparison for legacy HMAC JWT verification and introduces an opportunity to check supported algorithms before signing (also contains a typo in an exception message).

Comment on lines +662 to +666
if (!"HMAC-SHA256".equals(algorithm)) {
log.debug("Missing or unknown algorithm was used to sign request! No claims returned.");
return null;
}
//check if data is signed correctly
if (!hmacSignAndEncode(signedRequests[1], secret).equals(signature)) {
log.debug("Signature is not correct, possibly the data was tampered with! No claims returned.");
// check if data is signed correctly using constant-time comparison
Comment thread server/src/main/java/org/cloudfoundry/identity/uaa/oauth/jwt/UaaMacSigner.java Outdated
@github-project-automation github-project-automation Bot moved this from Inbox to Pending Merge | Prioritized in Foundational Infrastructure Working Group Jul 25, 2026
@duanemay
duanemay merged commit 3acf8c9 into develop Jul 25, 2026
26 checks passed
@duanemay
duanemay deleted the signature_validation branch July 25, 2026 14:24
@github-project-automation github-project-automation Bot moved this from Pending Merge | Prioritized to Done in Foundational Infrastructure Working Group Jul 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Development

Successfully merging this pull request may close these issues.

3 participants