<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://vulnerability.circl.lu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-06T06:12:37.079277+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@circl.lu</email>
  </author>
  <link href="https://vulnerability.circl.lu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/bdu:2026-15803</id>
    <title>bdu:2026-15803</title>
    <updated>2026-10-06T06:12:37.120256+00:00</updated>
    <content>bdu:2026-15803</content>
    <link href="https://vulnerability.circl.lu/vuln/bdu:2026-15803"/>
  </entry>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/fkie_cve-2026-102275</id>
    <title>fkie_cve-2026-102275</title>
    <updated>2026-10-06T06:12:37.120329+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>PyJWT is a Python implementation of JSON Web Token standards. From 2.1.0 until 2.15.0, PyJWT OKPAlgorithm.from_jwk in  jwt/algorithms.py is affected because private-JWK import path does not compare the public key derived from d with x. This occurs when an OKP private JWK supplies non-corresponding x and d components. As a result, identity derived from x can differ from operations performed with d. Consequently, if an integration also accepts private key parameters from a proof header without rejecting them, an attacker may use a stolen sender-constrained token without the legitimate private key. This issue is fixed in version 2.15.0.</p>
      </div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/fkie_cve-2026-102275"/>
  </entry>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/ghsa-x33g-cr3x-6449</id>
    <title>GHSA-x33g-cr3x-6449 — PyJWT accepts inconsistent OKP x/d JWKs, causing public/private key identity confusion</title>
    <updated>2026-10-06T06:12:37.120402+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: PyJWT</p>
<p>### Summary</p>
<p>PyJWT accepts internally inconsistent OKP private JWKs where the declared public key `x` does not correspond to the supplied private key `d`.</p>
<p>When `d` is present, `OKPAlgorithm.from_jwk()` constructs the Ed25519/Ed448 private key from `d` without verifying that the public key derived from `d` matches `x`. As a result, the original JWK can contain one public key identity while PyJWT performs cryptographic operations using a different key.</p>
<p>In affected DPoP integrations, this can allow a stolen sender-constrained access token to be used without possession of the legitimate holder's private key.</p>
<p>### Details</p>
<p>The vulnerable logic is in `jwt/algorithms.py`:</p>
<p>```python
if "x" not in obj:
    raise InvalidKeyError('OKP should have "x" parameter')</p>
<p>x = base64url_decode(obj.get("x"))</p>
<p>if "d" not in obj:
    if curve == "Ed25519":
        return Ed25519PublicKey.from_public_bytes(x)
    return Ed448PublicKey.from_public_bytes(x)</p>
<p>d = base64url_decode(obj.get("d"))</p>
<p>if curve == "Ed25519":
    return Ed25519PrivateKey.from_private_bytes(d)</p>
<p>return Ed448PrivateKey.from_private_bytes(d)
```</p>
<p>When `d` is present, `x` is parsed but never compared with the public key derived from `d`.</p>
<p>For example, PyJWT accepts:</p>
<p>```json
{
  "kty": "OKP",
  "crv": "Ed25519",
  "x": "&lt;legitimate-user-public-key&gt;",
  "d": "&lt;attacker-private-key&gt;"
}
```</p>
<p>even though `x` and `d` belong to different key pairs.</p>
<p>The behavior has existed since OKP private-JWK import was introduced:</p>
<p>* Ed25519: PyJWT…</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/ghsa-x33g-cr3x-6449"/>
  </entry>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/opensuse-su-2026:11994-1</id>
    <title>openSUSE-SU-2026:11994-1 — python313-PyJWT-2.15.1-1.1 on GA media</title>
    <updated>2026-10-06T06:12:37.120614+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>python313-PyJWT-2.15.1-1.1 on GA media</p>
      </div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/opensuse-su-2026:11994-1"/>
  </entry>
  <entry>
    <id>https://vulnerability.circl.lu/vuln/ubuntu-cve-2026-102275</id>
    <title>UBUNTU-CVE-2026-102275</title>
    <updated>2026-10-06T06:12:37.120653+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> Ubuntu:Pro:16.04:LTS: pyjwt, Ubuntu:Pro:18.04:LTS: pyjwt, Ubuntu:Pro:20.04:LTS: pyjwt, Ubuntu:22.04:LTS: pyjwt, Ubuntu:24.04:LTS: pyjwt, Ubuntu:26.04:LTS: pyjwt</p>
<p>PyJWT is a Python implementation of JSON Web Token standards. From 2.1.0 until 2.15.0, PyJWT OKPAlgorithm.from_jwk in  jwt/algorithms.py is affected because private-JWK import path does not compare the public key derived from d with x. This occurs when an OKP private JWK supplies non-corresponding x and d components. As a result, identity derived from x can differ from operations performed with d. Consequently, if an integration also accepts private key parameters from a proof header without rejecting them, an attacker may use a stolen sender-constrained token without the legitimate private key. This issue is fixed in version 2.15.0.</p></div>
    </content>
    <link href="https://vulnerability.circl.lu/vuln/ubuntu-cve-2026-102275"/>
  </entry>
</feed>
