CVE-2025-67221
High · 7.5CVSS
7.5
EPSS
0.6%
Published
Jan 22, 2026
CISA due date
—
Cloudanix analysis
A component that turns data into JSON can be forced to crash if it is given data nested too many layers deep, knocking related monitoring services offline until they are restarted.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Trivial
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Low
- Patch risk
- Low
What it actually does
orjson.dumps in orjson through 3.11.4 performs unbounded recursive descent when serializing JSON. A document whose object or array nesting exceeds native stack capacity can overflow the stack and abort the process. The CVSS vector is availability-only (C:N/I:N/A:H): confidentiality and integrity are not affected, but the hosting process is fully taken down until it is restarted.
Why it matters to the business
Services that serialize untrusted JSON with the affected library—including OpenTelemetry Collector Contrib FIPS on MinimOS—can be crashed, interrupting telemetry ingestion, dashboards, and alerting. That outage can also hide concurrent incidents. The CVE is not in CISA KEV, is not tied to ransomware, and has no known exploit maturity; EPSS is low (~0.006) with only a modest 9% rise over 30 days, so mass opportunistic exploitation is unlikely. It has been public for roughly 249 days, so remaining unpatched collectors are a lingering operational-availability risk rather than a new emergency.
How an attack unfolds
An unauthenticated remote attacker who can submit JSON that is later passed to orjson.dumps crafts a document with extreme nesting. When the collector or application serializes it, unbounded recursion exhausts the stack and the process dies. No privileges or user interaction are required if a network-facing path accepts and re-encodes attacker-controlled JSON. No named threat actors or campaigns are associated with this issue, and there is no public exploit maturity.
How to fix it
Upgrade opentelemetry-collector-contrib-fips (MinimOS) to 0.138.0-r1 or later, which addresses this issue. Independently, replace orjson 3.11.4 and earlier with a release that bounds recursion in dumps. As defense in depth, reject or flatten JSON above a conservative nesting limit before serialization, and run collectors under process supervision so a crash does not leave a lasting outage.
How to confirm the fix worked
Confirm the deployed MinimOS package is opentelemetry-collector-contrib-fips 0.138.0-r1 or newer and that the bundled orjson is newer than 3.11.4. Inventory other runtimes that import orjson and verify they are patched. After upgrade, submit moderately nested but policy-allowed JSON through the same serialize path and confirm the process stays up; keep production validation within safe nesting limits rather than attempting stack-exhausting inputs.
Typical attack path
- Locate a network-reachable path that accepts attacker-controlled JSON and serializes it with orjson.dumps (for example an OpenTelemetry collector or other orjson-backed service).
- Submit a JSON document whose object or array nesting is deep enough to exceed the process stack.
- Cause the application to invoke orjson.dumps on that document.
- The process overflows the stack and terminates, denying service.
- Repeat submissions as needed to keep crash-looping the service after restarts.
How to detect it
There is no public in-the-wild exploitation, named actor activity, or ransomware use to hunt for. Look retrospectively for unexplained collector or Python-process crashes, rapid restart loops, and gaps in telemetry around the time nested JSON was ingested. Review application and supervisor logs, core dumps, and kernel logs for native stack overflow or segmentation faults in a process that loads orjson, especially during JSON serialization. Correlate those events with inbound requests carrying unusually deep JSON. Absence of these artifacts does not prove the service was never targeted; it only means a crash may not have been captured.
- orjson.dumps
- Fatal Python error: _Py_CheckRecursiveCall
- RecursionError: maximum recursion depth exceeded
- segfault.*orjson
- SIGSEGV
- opentelemetry-collector-contrib
What your security team should do
- Patch opentelemetry-collector-contrib-fips (MinimOS) to 0.138.0-r1 or later as the primary fix.
- Inventory every runtime that depends on orjson and upgrade anything still on 3.11.4 or earlier.
- Enforce a maximum JSON nesting depth at ingress so untrusted documents cannot reach dumps.
- Watch collector process crashes, restarts, and gap in telemetry as availability signals until the fleet is patched.
- Treat this as an availability hardening item, not an active KEV or ransomware-driven emergency, given none exploit maturity and low EPSS.
The record
The orjson.dumps function in orjson thru 3.11.4 does not limit recursion for deeply nested JSON documents.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| PyPI | orjson | 0 | No fix |
| Chainguard | authentik | 0 | 2025.12.1-r0 |
| Chainguard | authentik-fips | 0 | 2025.12.1-r0 |
| Chainguard | datadog-agent-7.75-core-integrations | 0 | 7.75.4-r2 |
| Chainguard | datadog-agent-fips-7.75-core-integrations | 0 | 7.75.4-r2 |
| Chainguard | kserve-storage-controller | 0 | 0.16.0-r11 |
| Chainguard | litellm | 0 | 1.80.15.0-r1 |
| Chainguard | py3.10-ambassador | 0 | 3.10.0-r19 |
| Chainguard | py3.12-ambassador | 0 | 3.10.0-r24 |
| Chainguard | py3.13-ambassador | 0 | 3.10.0-r19 |
| Wolfi | datadog-agent-7.75-core-integrations | 0 | 7.75.4-r2 |
| Wolfi | kserve-storage-controller | 0 | 0.16.0-r11 |
| Wolfi | py3.10-ambassador | 0 | 3.10.0-r19 |
| Wolfi | py3.12-ambassador | 0 | 3.10.0-r24 |
| Wolfi | py3.13-ambassador | 0 | 3.10.0-r19 |
| openSUSE:Leap 16.0 | python-orjson | 0 | 3.10.15-160000.3.1 |
| openSUSE:Tumbleweed | python-orjson | 0 | 3.11.5-1.1 |
Related vulnerabilities
- CVE-2026-30922 pyasn1 is a generic ASN.1 library for Python. Also affects authentik
- CVE-2026-27448 pyOpenSSL is a Python wrapper around the OpenSSL library. Also affects authentik
- CVE-2026-27459 pyOpenSSL is a Python wrapper around the OpenSSL library. Also affects authentik
- CVE-2026-32597 PyJWT is a JSON Web Token implementation in Python. Also affects authentik
- CVE-2026-26007 cryptography is a package designed to expose cryptographic primitives and recipes to… Also affects authentik
- GHSA-6426-9fv3-65x8 Django has an SQL Injection issue Also affects authentik
- GHSA-gvg8-93h5-g6qq Django has an SQL Injection issue Also affects authentik
- GHSA-2mcm-79hx-8fxw Django has Observable Timing Discrepancy Also affects authentik