You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chore(deps): update module github.com/golang-jwt/jwt/v4 to v4.5.2 [security] - #200
Unclear documentation of the error behavior in ParseWithClaims can lead to situation where users are potentially not checking errors in the way they should be. Especially, if a token is both expired and invalid, the errors returned by ParseWithClaims return both error codes. If users only check for the jwt.ErrTokenExpired using error.Is, they will ignore the embedded jwt.ErrTokenSignatureInvalid and thus potentially accept invalid tokens.
Fix
We have back-ported the error handling logic from the v5 branch to the v4 branch. In this logic, the ParseWithClaims function will immediately return in "dangerous" situations (e.g., an invalid signature), limiting the combined errors only to situations where the signature is valid, but further validation failed (e.g., if the signature is valid, but is expired AND has the wrong audience). This fix is part of the 4.5.1 release.
Workaround
We are aware that this changes the behaviour of an established function and is not 100 % backwards compatible, so updating to 4.5.1 might break your code. In case you cannot update to 4.5.0, please make sure that you are properly checking for all errors ("dangerous" ones first), so that you are not running in the case detailed above.
token, err:=/* jwt.Parse or similar */if token.Valid {
fmt.Println("You look nice today")
} elseiferrors.Is(err, jwt.ErrTokenMalformed) {
fmt.Println("That's not even a token")
} elseiferrors.Is(err, jwt.ErrTokenUnverifiable) {
fmt.Println("We could not verify this token")
} elseiferrors.Is(err, jwt.ErrTokenSignatureInvalid) {
fmt.Println("This token has an invalid signature")
} elseiferrors.Is(err, jwt.ErrTokenExpired) ||errors.Is(err, jwt.ErrTokenNotValidYet) {
// Token is either expired or not active yetfmt.Println("Timing is everything")
} else {
fmt.Println("Couldn't handle this token:", err)
}
As a result, in the face of a malicious request whose Authorization header consists of Bearer followed by many period characters, a call to that function incurs allocations to the tune of O(n) bytes (where n stands for the length of the function's argument), with a constant factor of about 16. Relevant weakness: CWE-405: Asymmetric Resource Consumption (Amplification)
Unclear documentation of the error behavior in ParseWithClaims in <= 4.5.0 could lead to situation where users are potentially not checking errors in the way they should be. Especially, if a token is both expired and invalid, the errors returned by ParseWithClaims return both error codes. If users only check for the jwt.ErrTokenExpired using error.Is, they will ignore the embedded jwt.ErrTokenSignatureInvalid and thus potentially accept invalid tokens.
No actionable comments were generated in the recent review. 🎉
ℹ️ Recent review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Advanced
Run ID: 5ebdb2ae-af86-4016-b6c6-c94ef3caa385
📥 Commits
Reviewing files that changed from the base of the PR and between fcb1c98 and 252c1fb.
⛔ Files ignored due to path filters (3)
pkgs/graph/go.sum is excluded by !**/*.sum
pkgs/identity/go.sum is excluded by !**/*.sum
pkgs/map/go.sum is excluded by !**/*.sum
📒 Files selected for processing (3)
pkgs/graph/go.mod
pkgs/identity/go.mod
pkgs/map/go.mod
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.
📝 Walkthrough
The graph, identity, and map Go modules upgrade the indirect github.com/golang-jwt/jwt/v4 dependency from v4.5.0 to v4.5.2.
The three modules consistently select the updated JWT version. The remaining older reference does not affect the import module’s normal build, so no actionable merge-blocking risk is identified.
### Architecture Summary
Architecture risk:🔵 Low · up to 252c1
The change affects 1 system.
Changed systems:pkgs
Architecture concerns
No architecture-level concerns identified.
Review details
Systems and components
observed — pkgs (service) was modified; 3 changed files map to changed impact.
Before / after behavior
observed — Modified behavior in pkgs/graph/go.mod: The indirect github.com/golang-jwt/jwt/v4 dependency version changes from v4.5.0 to v4.5.2.
observed — Modified behavior in pkgs/identity/go.mod: Updated the indirect github.com/golang-jwt/jwt/v4 dependency from v4.5.0 to v4.5.2.
observed — Modified behavior in pkgs/map/go.mod: The indirect github.com/golang-jwt/jwt/v4 dependency version changes from v4.5.0 to v4.5.2.
Pre-merge checks · 5
Passed checks (5 passed)
Check name
Status
Explanation
Description Check
Check skipped - CodeRabbit’s high-level summary is enabled.
Title check
The title clearly and concisely describes the dependency upgrade and identifies its security purpose.
Docstring Coverage
No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check
Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check
Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
Commit to this branch
Create a new PR
🧪 Generate unit tests (beta)
Commit to this branch
Create a new PR
Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Warning
Some tools did not complete. Review the errors below.
🔧 golangci-lint (2.13.2)
golangci-lint (2.13.2) skipped for pkgs/identity/.golangci.yml: configuration requires version: "2". Migrate older configurations using golangci-lint migrate and review the result; see https://golangci-lint.run/docs/product/migration-guide/.
Comment @coderabbitai help to get the list of available commands.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v4.5.0→v4.5.2Bad documentation of error handling in ParseWithClaims can lead to potentially dangerous situations
CVE-2024-51744 / GHSA-29wx-vh33-7x7r
More information
Details
Summary
Unclear documentation of the error behavior in
ParseWithClaimscan lead to situation where users are potentially not checking errors in the way they should be. Especially, if a token is both expired and invalid, the errors returned byParseWithClaimsreturn both error codes. If users only check for thejwt.ErrTokenExpiredusingerror.Is, they will ignore the embeddedjwt.ErrTokenSignatureInvalidand thus potentially accept invalid tokens.Fix
We have back-ported the error handling logic from the
v5branch to thev4branch. In this logic, theParseWithClaimsfunction will immediately return in "dangerous" situations (e.g., an invalid signature), limiting the combined errors only to situations where the signature is valid, but further validation failed (e.g., if the signature is valid, but is expired AND has the wrong audience). This fix is part of the 4.5.1 release.Workaround
We are aware that this changes the behaviour of an established function and is not 100 % backwards compatible, so updating to 4.5.1 might break your code. In case you cannot update to 4.5.0, please make sure that you are properly checking for all errors ("dangerous" ones first), so that you are not running in the case detailed above.
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:N/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
jwt-go allows excessive memory allocation during header parsing
CVE-2025-30204 / GHSA-mh63-6h87-95cp
More information
Details
Summary
Function
parse.ParseUnverifiedcurrently splits (via a call to strings.Split) its argument (which is untrusted data) on periods.As a result, in the face of a malicious request whose Authorization header consists of
Bearerfollowed by many period characters, a call to that function incurs allocations to the tune of O(n) bytes (where n stands for the length of the function's argument), with a constant factor of about 16. Relevant weakness: CWE-405: Asymmetric Resource Consumption (Amplification)Details
See
parse.ParseUnverifiedImpact
Excessive memory allocation
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
golang-jwt/jwt (github.com/golang-jwt/jwt/v4)
v4.5.2Compare Source
See GHSA-mh63-6h87-95cp
Full Changelog: golang-jwt/jwt@v4.5.1...v4.5.2
v4.5.1Compare Source
Security
Unclear documentation of the error behavior in
ParseWithClaimsin <= 4.5.0 could lead to situation where users are potentially not checking errors in the way they should be. Especially, if a token is both expired and invalid, the errors returned byParseWithClaimsreturn both error codes. If users only check for thejwt.ErrTokenExpiredusingerror.Is, they will ignore the embeddedjwt.ErrTokenSignatureInvalidand thus potentially accept invalid tokens.This issue was documented in GHSA-29wx-vh33-7x7r and fixed in this release.
Note:
v5was not affected by this issue. So upgrading to this release version is also recommended.What's Changed
ParseWithClaimsfromv5branch. This fixes GHSA-29wx-vh33-7x7r.Full Changelog: golang-jwt/jwt@v4.5.0...v4.5.1
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.