<?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>Thu, 01 Oct 2026 23:31:37 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-101918 — PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / ver…</title>
      <link>https://db.gcve.eu/vuln/cve-2026-101918</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; jpadilla pyjwt&lt;/p&gt;
&lt;p&gt;PyJWT is a Python implementation of JSON Web Token standards. From 2.0.0a1 until 2.15.0, PyJWT PyJWKClient.get_signing_key_from_jwt is affected because payload parser catches ValueError but not RecursionError. This occurs when an attacker-controlled recursively nested payload reaches json.loads. As a result, documented PyJWT exception handling does not contain the failure. Consequently, an unauthenticated request can raise an exception that may produce an HTTP 500 response. The advisory-defined affected implementation also includes jwt/api_jwt.py, verify_signature=False. This issue is fixed in version 2.15.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; jpadilla pyjwt&lt;/p&gt;
&lt;p&gt;PyJWT is a Python implementation of JSON Web Token standards. From 2.0.0a1 until 2.15.0, PyJWT PyJWKClient.get_signing_key_from_jwt is affected because payload parser catches ValueError but not RecursionError. This occurs when an attacker-controlled recursively nested payload reaches json.loads. As a result, documented PyJWT exception handling does not contain the failure. Consequently, an unauthenticated request can raise an exception that may produce an HTTP 500 response. The advisory-defined affected implementation also includes jwt/api_jwt.py, verify_signature=False. This issue is fixed in version 2.15.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-101918</guid>
    </item>
    <item>
      <title>GHSA-42vr-xj54-vc7v — PyJWT: Unauthenticated RecursionError DoS in pre-verification payload parse (PyJWKClient.get_signing_key_from_jwt / ver…</title>
      <link>https://db.gcve.eu/vuln/ghsa-42vr-xj54-vc7v</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: PyJWT&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`PyJWKClient.get_signing_key_from_jwt(token)` — the first step of the JWKS
verification flow documented in `docs/usage.rst` — must decode a token&amp;#39;s
payload before its signature can be checked, via
`jwt.api_jwt.decode_complete(token, options={&amp;#34;verify_signature&amp;#34;: False})`.
That call parses the payload with `json.loads` in `PyJWT._decode_payload`
(`jwt/api_jwt.py:297-300`), whose `except` clause catches only `ValueError`.
A payload that is valid JSON but nested ~20,000 levels deep makes
`json.loads` raise `RecursionError`, which is **not** a `ValueError` and
escapes as a raw, undocumented exception type — not `DecodeError`,
`InvalidTokenError`, or `PyJWTError`, so every documented error-handling
pattern in `docs/usage.rst` misses it.&lt;/p&gt;
&lt;p&gt;The token needs no valid signature and no network access — the crash
happens during payload parsing, before the `kid` is even looked up. A
single unauthenticated ~50KB request crashes the caller&amp;#39;s auth handler
(HTTP 500 / dead worker), repeatably. The same path is reachable through
plain `jwt.decode(token, options={&amp;#34;verify_signature&amp;#34;: False})` too.&lt;/p&gt;
&lt;p&gt;Notably, this project already fixed the **identical** bug class for the
JWS **header** path — `PyJWS._load` catches `(ValueError, RecursionError)`
and wraps it in `DecodeError` (`jwt/api_jws.py:360-361`), and
`CHANGELOG.rst` (v2.14.0, &amp;#34;Security&amp;#34;) states &amp;#34;Handle deeply nested and
malformed JWS/JWK input without uncaught recursion errors.&amp;#34; The payload
path — the one part of a forged token an…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: PyJWT&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`PyJWKClient.get_signing_key_from_jwt(token)` — the first step of the JWKS
verification flow documented in `docs/usage.rst` — must decode a token&amp;#39;s
payload before its signature can be checked, via
`jwt.api_jwt.decode_complete(token, options={&amp;#34;verify_signature&amp;#34;: False})`.
That call parses the payload with `json.loads` in `PyJWT._decode_payload`
(`jwt/api_jwt.py:297-300`), whose `except` clause catches only `ValueError`.
A payload that is valid JSON but nested ~20,000 levels deep makes
`json.loads` raise `RecursionError`, which is **not** a `ValueError` and
escapes as a raw, undocumented exception type — not `DecodeError`,
`InvalidTokenError`, or `PyJWTError`, so every documented error-handling
pattern in `docs/usage.rst` misses it.&lt;/p&gt;
&lt;p&gt;The token needs no valid signature and no network access — the crash
happens during payload parsing, before the `kid` is even looked up. A
single unauthenticated ~50KB request crashes the caller&amp;#39;s auth handler
(HTTP 500 / dead worker), repeatably. The same path is reachable through
plain `jwt.decode(token, options={&amp;#34;verify_signature&amp;#34;: False})` too.&lt;/p&gt;
&lt;p&gt;Notably, this project already fixed the **identical** bug class for the
JWS **header** path — `PyJWS._load` catches `(ValueError, RecursionError)`
and wraps it in `DecodeError` (`jwt/api_jws.py:360-361`), and
`CHANGELOG.rst` (v2.14.0, &amp;#34;Security&amp;#34;) states &amp;#34;Handle deeply nested and
malformed JWS/JWK input without uncaught recursion errors.&amp;#34; The payload
path — the one part of a forged token an…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-42vr-xj54-vc7v</guid>
    </item>
  </channel>
</rss>
