Skip to main content
CVE-2026-103001VulnerabilityPublished Updated

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

Affects hermes-agentSource GCVE Database

0
Authoritative record:CVE-2026-103001· Medium 6.5

Not known to be exploited · CVSS 6.5 Medium : upgrade to 0.22.4 when convenient.

Data as of 27 Oct 2026, 21:00 UTC

CVSS 3.1 base score
6.5Medium
How severe the flaw is on the 0–10 CVSS scale.
Patch
Available – fixed in 0.22.4
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 30 Sep 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponised: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 26 Oct 2026.

What to do

Upgrade hermes-agent to 0.22.4.

Affected software

ProductAffectedFixed in
Homebrewhermes-agentpkg:brew/hermes-agentOther threatsAffected
  • >=0.21.6 <0.22.4
  • >=2026.4.30 <=2026.9.24
Fixed in
  • 0.22.4

Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.

AI-suggested

A patch is available in PyJWT version 0.22.4 that restores a shallow copy of the options dictionary inside the _merge_options() function to prevent mutation of caller-supplied dictionaries. Users should upgrade to version 0.22.4 or later to remediate this issue. Until patched, avoid reusing the same options dictionary across decode calls with different verification settings; instead, create a fresh options dictionary for each call.

Description

PyJWT versions from 0.21.6 up to but not including 0.22.4, and versions from 2026.4.30 through 2026.9.24, contain a vulnerability where the decode() function mutates a caller-supplied options dictionary when signature verification is disabled. If the same options dictionary is reused with signature verification enabled later, it can silently bypass claim verifications such as expiration, audience, issuer, and subject checks. This leads to acceptance of expired or otherwise invalid tokens without exceptions. The issue is a regression introduced in March 2025 and fixed in version 0.22.4. The vulnerability has a medium severity with a CVSS score of 6.5.

References

Community reviews

Loading reviews…