Skip to main content
Public proof of conceptFix available

CVE-2026-103001

PyJWT.decode() reintroduces options-dict mutation, enabling silent claim-verification bypass on dict reuse

A public proof of concept exists; no exploitation attested.

  • Published2026-09-30
  • Fixed in2.13.0
  • WeaknessCWE-471

Am I affected?

With a domain, we read the version its public headers and pages expose. A distribution build can carry the fix under an older number.

Description

PyJWT is a Python implementation of JSON Web Token standards. From 2.11.0 through 2.13.0, PyJWT's PyJWT._merge_options() method can modify a caller-supplied mutable options mapping when verify_signature is false. If an application reuses that same mapping for a later decode() or decode_complete() call and changes verify_signature to true, the mapping can retain false values for expiration, not-before, issued-at, audience, issuer, subject, and JWT ID checks. A signed token with invalid registered claims can then be accepted without disabling signature verification, but applications that create a fresh options mapping for each call are not affected.

Timeline

dates in UTC
  1. 2026-09-3022:16CVE publishedNVD

Observed activity

isMalicious corpus · updated 2026-10-23 21:37 UTC
Indicators tagged with this CVE, per day0 indicators over 7 days
Block these indicators
  • Firewall list (EDL, text): https://api.ismalicious.com/edl/cve/CVE-2026-103001?format=txt
  • CSV export: https://api.ismalicious.com/edl/cve/CVE-2026-103001?format=csv
  • TAXII collection of exploited CVEs
  • The EDL and CSV take an API key on the Pro plan.

Versions per branch

NVD · OSV
Pyjwt project pyjwt
BranchAffectedFixed in
2.x≥ 2.11.0, < 2.13.02.13.0
pyjwt
BranchAffectedFixed in
2.x≥ 2.11.0, ≤ 2.13.0no fix published

as publishedRanges as NVD and OSV publish them; a distribution’s build can be fixed under an older number.

Distribution builds and vendor advisories

Packages from OSV.dev and products from the vendors' CSAF advisories.

version not verifiedVersions not verified: read as OSV.dev and the vendors publish them, not checked against each vendor's release list.

Vendor advisories

  • CVE-2026-103001 Red Hat Product Security8 products fixed · 233 known affected

    pyjwt: pyjwt: Token validation bypass via options dictionary mutation

    ansible-automation-platform/automation-orchestrator-backend-rhel9 as a component of Ansible Automation Orchestrator 2026 · openshift-sandboxed-containers/osc-podvm-builder-rhel9 as a component of Confidential Compute Attestation · workload-availability/fence-agents-remediation-rhel9-operator as a component of Fence Agents Remediation Operator · +230 more

  • RHSA-2026:82415 Red Hat Product Security1 product fixed

    Red Hat Security Advisory: Red Hat AI Inference 3.5.2 (cpu)

  • RHSA-2026:82371 Red Hat Product Security3 products fixed

    Red Hat Security Advisory: Red Hat AI Inference 3.5.2 (spyre)

  • RHSA-2026:82368 Red Hat Product Security2 products fixed

    Red Hat Security Advisory: Red Hat AI Inference 3.5.2 (cuda)

  • RHSA-2026:82061 Red Hat Product Security1 product fixed

    Red Hat Security Advisory: Red Hat AI Inference Tech Preview 3.5.2 (Gaudi)

  • RHSA-2026:82059 Red Hat Product Security1 product fixed

    Red Hat Security Advisory: Red Hat AI Inference 3.5.2 (ROCm)

Full record on NVD

Fix

  1. Update Pyjwt project pyjwt to 2.13.0
  2. Vendor fix Red Hat Product Security RHSA-2026:82415 · 1 productFor more information visit https://access.redhat.com/errata/RHSA-2026:82415
  3. Vendor fix Red Hat Product Security RHSA-2026:82371 · 3 productsFor more information visit https://access.redhat.com/errata/RHSA-2026:82371
  4. Vendor fix Red Hat Product Security RHSA-2026:82368 · 2 productsFor more information visit https://access.redhat.com/errata/RHSA-2026:82368
  5. Vendor fix Red Hat Product Security RHSA-2026:82061 · 1 productFor more information visit https://access.redhat.com/errata/RHSA-2026:82061
  6. Vendor fix Red Hat Product Security RHSA-2026:82059 · 1 productFor more information visit https://access.redhat.com/errata/RHSA-2026:82059
  7. Workaround from the vendor Red Hat Product Security RHSA-2026:82415 · 1 productUntil a fixed PyJWT version is available, create a new options dictionary for each decode() or decode_complete() call. Do not reuse a mutable options dictionary between calls with different verification settings.

Advisories and patches

Detection

Nuclei template
none so far
ProjectDiscovery
Exploit-DB
no entry
Exploit-DB
Proof-of-concept repositories
none listed
PoC-in-GitHub

Sources

  • NVDCVE recordread 2026-10-23
  • CISA-ADPSSVC decisionpoc2026-10-05
  • OpenCVESSVC decisionpoc—
  • CNACVSS 3.16.5read 2026-10-23
  • CNAweakness (CWE)CWE-471read 2026-10-23
  • FIRST EPSSEPSS score0.2 %2026-10-22
  • OSVaffected packages—

Technical details

CVSS v3 Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N
Published
2026-09-30
Last Modified
2026-10-08
NVD status
Analyzed

Frequently asked questions

What is CVE-2026-103001?

PyJWT is a Python implementation of JSON Web Token standards. From 2.11.0 through 2.13.0, PyJWT's PyJWT._merge_options() method can modify a caller-supplied mutable options mapping when verify_signature is false. If an application reuses that same mapping for a later decode() or decode_complete() call and changes verify_signature to true, the mapping can retain false values for expiration, not-before, issued-at, audience, issuer, subject, and JWT ID checks. A signed token with invalid registered claims can then be accepted without disabling signature verification, but applications that create a fresh options mapping for each call are not affected.

Is CVE-2026-103001 actively exploited?

A proof-of-concept exploit exists for CVE-2026-103001, but active exploitation has not been confirmed at this time.

What is the CVSS score for CVE-2026-103001?

CVE-2026-103001 has a CVSS v3 base score of 6.5 (MEDIUM severity), with vector string CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N.

Running pyjwt? Hear about its next vulnerability

Surveillance reads the versions in your stack — a domain, a lockfile or a list — checks each CVE against the ranges its sources publish, and alerts you when one you run is exploited or enters CISA KEV. A version it cannot read stays « version not verified ».

No credit card required · No monthly cap on website lookups · 250 API requests/month