|
|
|
@@ -0,0 +1,99 @@
|
|
|
|
|
From aae4b1bdc593b2b454469992977f776bd35435f3 Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: Danish Prakash <contact@danishpraka.sh>
|
|
|
|
|
Date: Fri, 28 Feb 2025 12:54:41 +0530
|
|
|
|
|
Subject: [PATCH 2/2] CVE-2025-27144: vendor: don't allow unbounded amounts of
|
|
|
|
|
splits (#11)
|
|
|
|
|
|
|
|
|
|
In compact JWS/JWE, don't allow unbounded number of splits.
|
|
|
|
|
Count to make sure there's the right number, then use SplitN.
|
|
|
|
|
|
|
|
|
|
This fixes CVE-2025-27144
|
|
|
|
|
This fixes bsc#1237641
|
|
|
|
|
|
|
|
|
|
Cherry-picked from
|
|
|
|
|
go-jose/go-jose@99b346c
|
|
|
|
|
|
|
|
|
|
Signed-off-by: Danish Prakash <contact@danishpraka.sh>
|
|
|
|
|
Co-authored-by: Matthew McPherrin <git@mcpherrin.ca>
|
|
|
|
|
---
|
|
|
|
|
vendor/github.com/go-jose/go-jose/v3/jwe.go | 5 +++--
|
|
|
|
|
vendor/github.com/go-jose/go-jose/v3/jws.go | 5 +++--
|
|
|
|
|
vendor/github.com/go-jose/go-jose/v4/jwe.go | 5 +++--
|
|
|
|
|
vendor/github.com/go-jose/go-jose/v4/jws.go | 5 +++--
|
|
|
|
|
4 files changed, 12 insertions(+), 8 deletions(-)
|
|
|
|
|
|
|
|
|
|
diff --git a/vendor/github.com/go-jose/go-jose/v3/jwe.go b/vendor/github.com/go-jose/go-jose/v3/jwe.go
|
|
|
|
|
index 4267ac75025a..1ba4ae0c0031 100644
|
|
|
|
|
--- a/vendor/github.com/go-jose/go-jose/v3/jwe.go
|
|
|
|
|
+++ b/vendor/github.com/go-jose/go-jose/v3/jwe.go
|
|
|
|
|
@@ -202,10 +202,11 @@ func (parsed *rawJSONWebEncryption) sanitized() (*JSONWebEncryption, error) {
|
|
|
|
|
|
|
|
|
|
// parseEncryptedCompact parses a message in compact format.
|
|
|
|
|
func parseEncryptedCompact(input string) (*JSONWebEncryption, error) {
|
|
|
|
|
- parts := strings.Split(input, ".")
|
|
|
|
|
- if len(parts) != 5 {
|
|
|
|
|
+ // Five parts is four separators
|
|
|
|
|
+ if strings.Count(input, ".") != 4 {
|
|
|
|
|
return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts")
|
|
|
|
|
}
|
|
|
|
|
+ parts := strings.SplitN(input, ".", 5)
|
|
|
|
|
|
|
|
|
|
rawProtected, err := base64URLDecode(parts[0])
|
|
|
|
|
if err != nil {
|
|
|
|
|
diff --git a/vendor/github.com/go-jose/go-jose/v3/jws.go b/vendor/github.com/go-jose/go-jose/v3/jws.go
|
|
|
|
|
index e37007dbb855..401fc18ac4df 100644
|
|
|
|
|
--- a/vendor/github.com/go-jose/go-jose/v3/jws.go
|
|
|
|
|
+++ b/vendor/github.com/go-jose/go-jose/v3/jws.go
|
|
|
|
|
@@ -275,10 +275,11 @@ func (parsed *rawJSONWebSignature) sanitized() (*JSONWebSignature, error) {
|
|
|
|
|
|
|
|
|
|
// parseSignedCompact parses a message in compact format.
|
|
|
|
|
func parseSignedCompact(input string, payload []byte) (*JSONWebSignature, error) {
|
|
|
|
|
- parts := strings.Split(input, ".")
|
|
|
|
|
- if len(parts) != 3 {
|
|
|
|
|
+ // Three parts is two separators
|
|
|
|
|
+ if strings.Count(input, ".") != 2 {
|
|
|
|
|
return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts")
|
|
|
|
|
}
|
|
|
|
|
+ parts := strings.SplitN(input, ".", 3)
|
|
|
|
|
|
|
|
|
|
if parts[1] != "" && payload != nil {
|
|
|
|
|
return nil, fmt.Errorf("go-jose/go-jose: payload is not detached")
|
|
|
|
|
diff --git a/vendor/github.com/go-jose/go-jose/v4/jwe.go b/vendor/github.com/go-jose/go-jose/v4/jwe.go
|
|
|
|
|
index 89f03ee3e1e6..9f1322dccc9c 100644
|
|
|
|
|
--- a/vendor/github.com/go-jose/go-jose/v4/jwe.go
|
|
|
|
|
+++ b/vendor/github.com/go-jose/go-jose/v4/jwe.go
|
|
|
|
|
@@ -288,10 +288,11 @@ func ParseEncryptedCompact(
|
|
|
|
|
keyAlgorithms []KeyAlgorithm,
|
|
|
|
|
contentEncryption []ContentEncryption,
|
|
|
|
|
) (*JSONWebEncryption, error) {
|
|
|
|
|
- parts := strings.Split(input, ".")
|
|
|
|
|
- if len(parts) != 5 {
|
|
|
|
|
+ // Five parts is four separators
|
|
|
|
|
+ if strings.Count(input, ".") != 4 {
|
|
|
|
|
return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts")
|
|
|
|
|
}
|
|
|
|
|
+ parts := strings.SplitN(input, ".", 5)
|
|
|
|
|
|
|
|
|
|
rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0])
|
|
|
|
|
if err != nil {
|
|
|
|
|
diff --git a/vendor/github.com/go-jose/go-jose/v4/jws.go b/vendor/github.com/go-jose/go-jose/v4/jws.go
|
|
|
|
|
index 3a912301afc2..d09d8ba5078c 100644
|
|
|
|
|
--- a/vendor/github.com/go-jose/go-jose/v4/jws.go
|
|
|
|
|
+++ b/vendor/github.com/go-jose/go-jose/v4/jws.go
|
|
|
|
|
@@ -327,10 +327,11 @@ func parseSignedCompact(
|
|
|
|
|
payload []byte,
|
|
|
|
|
signatureAlgorithms []SignatureAlgorithm,
|
|
|
|
|
) (*JSONWebSignature, error) {
|
|
|
|
|
- parts := strings.Split(input, ".")
|
|
|
|
|
- if len(parts) != 3 {
|
|
|
|
|
+ // Three parts is two separators
|
|
|
|
|
+ if strings.Count(input, ".") != 2 {
|
|
|
|
|
return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts")
|
|
|
|
|
}
|
|
|
|
|
+ parts := strings.SplitN(input, ".", 3)
|
|
|
|
|
|
|
|
|
|
if parts[1] != "" && payload != nil {
|
|
|
|
|
return nil, fmt.Errorf("go-jose/go-jose: payload is not detached")
|
|
|
|
|
--
|
|
|
|
|
2.46.0
|
|
|
|
|
|