testkube-enterprise-api-1.10.86_linux_arm64
digest | sha256:1407feed9edcc1f28367d32039472035ce8b58f874068369aee707d0ab543326 |
vulnerabilities | |
size | 21 MB |
packages | 205 |
gopkg.in/square/go-jose.v2 |
Affected range | <=2.6.0 |
Fixed version | Not Fixed |
CVSS Score | 4.3 |
CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L |
EPSS Score | 0.05% |
EPSS Percentile | 19th percentile |
Description
Impact
An attacker could send a JWE containing compressed data that used large amounts of memory and CPU when decompressed by Decrypt or DecryptMulti. Those functions now return an error if the decompressed data would exceed 250kB or 10x the compressed size (whichever is larger). Thanks to Enze Wang@Alioth and Jianjun Chen@Zhongguancun Lab (@zer0yu and @chenjj) for reporting.
Patches
The problem is fixed in the following packages and versions:
- github.com/go-jose/go-jose/v4 version 4.0.1
- github.com/go-jose/go-jose/v3 version 3.0.3
- gopkg.in/go-jose/go-jose.v2 version 2.6.3
The problem will not be fixed in the following package because the package is archived:
- gopkg.in/square/go-jose.v2
github.com/golang-jwt/jwt/v4 4.5.0
(golang)
pkg:golang/github.com/golang-jwt/jwt@4.5.0#v4
Improper Verification of Cryptographic Signature
Affected range | <4.5.1 |
Fixed version | 4.5.1 |
CVSS Score | 3.1 |
CVSS Vector | CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N |
EPSS Score | 0.04% |
EPSS Percentile | 10th percentile |
Description
Summary
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 byParseWithClaims
return both error codes. If users only check for thejwt.ErrTokenExpired
usingerror.Is
, they will ignore the embeddedjwt.ErrTokenSignatureInvalid
and thus potentially accept invalid tokens.Fix
We have back-ported the error handling logic from the
v5
branch to thev4
branch. In this logic, theParseWithClaims
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")
} else if errors.Is(err, jwt.ErrTokenMalformed) {
fmt.Println("That's not even a token")
} else if errors.Is(err, jwt.ErrTokenUnverifiable) {
fmt.Println("We could not verify this token")
} else if errors.Is(err, jwt.ErrTokenSignatureInvalid) {
fmt.Println("This token has an invalid signature")
} else if errors.Is(err, jwt.ErrTokenExpired) || errors.Is(err, jwt.ErrTokenNotValidYet) {
// Token is either expired or not active yet
fmt.Println("Timing is everything")
} else {
fmt.Println("Couldn't handle this token:", err)
}