CVE-2026-26209 json
cbor2 has a Denial of Service via Uncontrolled Recursion in cbor2.loads
published 2026-03-23 7 mo ago modified 2026-09-10 1 mo ago also EUVD-2026-14478 , GHSA-3c37-wwvx-h642 , PYSEC-2026-2123
- cvss
- 7.5
- version 3.0, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.4%
- EPSS 0.4% chance of exploitation in 30 days, percentile 34%
- public exploits
- 0
- none known
Summary
cbor2 provides encoding and decoding for the Concise Binary Object Representation (CBOR) serialization format. Versions prior to 5.9.0 are vulnerable to a Denial of Service (DoS) attack caused by uncontrolled recursion when decoding deeply nested CBOR structures. This vulnerability affects both the pure Python implementation and the C extension `_cbor2`. The C extension relies on Python's internal recursion limits `Py_EnterRecursiveCall` rather than a data-driven depth limit, meaning it still raises `RecursionError` and crashes the worker process when the limit is hit. While the library handles moderate nesting levels, it lacks a hard depth limit. An attacker can supply a crafted CBOR payload containing approximately 100,000 nested arrays `0x81`. When `cbor2.loads()` attempts to parse this, it hits the Python interpreter's maximum recursion depth or exhausts the stack, causing the process to crash with a `RecursionError`. Because the library does not enforce its own limits, it allows an external attacker to exhaust the host application's stack resource. In many web application servers (e.g., Gunicorn, Uvicorn) or task queues (Celery), an unhandled `RecursionError` terminates the worker process immediately. By sending a stream of these small (<100KB) malicious packets, an attacker can repeatedly crash worker processes, resulting in a complete Denial of Service for the application. Version 5.9.0 patches the issue.
Patch / fix
- pypi cbor2 5.9.0
- agronholm cbor2 5.9.0
- cbor2 Debian 14 5.9.0-1
debian advisories DEBIAN-CVE-2026-26209
- python-cbor2 SLES for SAP applications 16.0, SLES 16.0 5.6.5-160000.4.1
suse advisories SUSE-SU-2026:21139-1
- python-cbor2 openSUSE Leap 16.0 5.6.5-160000.4.1
- python-cbor2 openSUSE Tumbleweed 5.9.0-1.1
opensuse advisories openSUSE-SU-2026:20468-1openSUSE-SU-2026:10425-1
- github.com/agronholm/cbor2@e61a5f3 commit
- github.com/agronholm/cbor2#275 pull request
- github.com/agronholm/cbor2/releases/tag/5.9.0 release
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2026-26209 updated cvss 5.5
cbor2: cbor2: Denial of Service due to uncontrolled recursion via crafted CBOR payloads
-
Red Hat AI Inference Server rhaiis/vllm-cpu-rhel9, rhaiis/vllm-tpu-rhel9, rhaiis/vllm-neuron-rhel9, rhaiis-preview/vllm-cuda-rhel9 Red Hat Ansible Automation Platform 2 ansible-automation-platform-26/lightspeed-rhel9 Red Hat Enterprise Linux AI (RHEL AI) 3 rhelai3/bootc-cuda-rhel9, rhelai3/bootc-rocm-rhel9, rhelai3/bootc-aws-cuda-rhel9, rhelai3/bootc-gcp-cuda-rhel9, rhelai3/bootc-azure-cuda-rhel9, rhelai3/bootc-azure-rocm-rhel9 Red Hat OpenShift AI (RHOAI) rhoai/odh-vllm-cpu-rhel9, rhoai/odh-vllm-cuda-rhel9, rhoai/odh-vllm-rocm-rhel9, rhoai/odh-vllm-gaudi-rhel9affected: no fix available “Fix deferred”
-
Red Hat AI Inference Server 3.2 rhaiis 1779223651, rhaiis 1779223654fixed: vendor fix RHSA-2026:19724
-
Red Hat AI Inference Server 3.3 rhaiis 1778244531, rhaiis 1778244546, rhaiis 1778274666fixed: vendor fix RHSA-2026:16030
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- Proof of concept is public
- Automatable
- yes
- Technical impact
- partial
- Assessed
- 7 mo ago
Exploit prediction
0.40% chance of exploitation in the next 30 days, higher than 34% of all scored CVEs (FIRST EPSS, 2026-11-08).
Exploits and checks
- github.com https://github.com/agronholm/cbor2/security/advisories/GHSA-3c37-wwvx-h642 referenced PoC, tagged "exploit" by a source, unverified
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.0 | 7.5 | CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| GitHub | 3.0 | 7.5 | CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| OSV | 3.0 | 7.5 | CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| pypi | cbor2 | <5.9.0 |
5.9.0 |
Affected products
- agronholm cbor2
Classification
- Weakness
-
- CWE-674 Uncontrolled Recursion
References
-
github.com
/agronholm/cbor2/pull/275
web, issue-tracking, patch
-
github.com
/agronholm/cbor2/commit/e61a5f365ba610d5907a0ae1bc72769bba34294b
web, patch
-
github.com
/agronholm/cbor2/security/advisories/GHSA-3c37-wwvx-h642
web, exploit, vendor-advisory, evidence
-
github.com
/agronholm/cbor2/releases/tag/5.9.0
web, product, release-notes, advisory
-
nvd.nist.gov
/vuln/detail/CVE-2026-26209
advisory
-
github.com
/agronholm/cbor2
package
Sources
- CVE List CVE-2026-26209
- GitHub Advisory GHSA-3c37-wwvx-h642
- NVD CVE-2026-26209
- OSV PYSEC-2026-2123
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.
CPEs and fixed versions use Anchore's correction of NVD's data: Added CPE configurations because not yet analyzed by NVD.