CVE-2026-30922
High · 7.5CVSS
7.5
EPSS
1.0%
Published
Mar 18, 2026
CISA due date
—
Cloudanix analysis
A malformed data file or request can crash software that uses a vulnerable Python decoding library, causing service outages until the library is updated.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
CVE-2026-30922 is an unauthenticated denial-of-service vulnerability in pyasn1 before version 0.6.3. The ASN.1 decoder can recurse without sufficient depth control when parsing attacker-supplied BER/DER-like data containing deeply nested SEQUENCE or SET elements, especially tags 0x30 or 0x31 using indefinite-length marker 0x80. A crafted input can drive recursive decoder calls until Python raises RecursionError, exhausts memory, or terminates the host process, causing loss of availability for any application path that decodes untrusted ASN.1 data. This issue is distinct from pyasn1 OID integer-overflow fixes and is not mitigated by MAX_OID_ARC_CONTINUATION_OCTETS.
Why it matters to the business
Applications that accept ASN.1-encoded data from untrusted sources can be crashed remotely, potentially interrupting authentication, certificate processing, telecom, identity, directory, cryptographic, or protocol-handling services that depend on pyasn1. Although there is no known KEV listing, ransomware association, or mature public exploitation indicated, the vulnerability has a network-reachable, low-complexity, no-authentication CVSS profile, so internet-facing or high-throughput services using pyasn1 should be prioritized for upgrade to avoid service outages and operational disruption.
How an attack unfolds
An attacker identifies an application endpoint, protocol listener, API, message consumer, or file-processing workflow that passes ASN.1 data to pyasn1 for decoding. The attacker sends a malicious ASN.1 payload composed of many nested constructed elements, commonly repeated SEQUENCE or SET tags with indefinite-length encodings. When the vulnerable decoder processes the payload, it repeatedly descends into nested structures without enforcing a safe recursion limit. The Python runtime eventually raises a recursion-depth exception, consumes excessive memory, or is killed by the operating system. If the vulnerable application does not isolate parsing failures or restart cleanly, the service becomes unavailable. Repeated submissions can sustain an outage.
How to fix it
Upgrade pyasn1 to version 0.6.3 or later everywhere it is used, including direct dependencies and transitive dependencies bundled into applications, containers, serverless packages, virtual environments, and vendor distributions. If an immediate upgrade is not possible, reduce exposure by rejecting untrusted ASN.1 inputs where feasible, enforcing strict request and file-size limits, applying parser timeouts, isolating ASN.1 decoding in a worker process with memory and CPU limits, and implementing graceful exception handling for RecursionError and MemoryError so a malformed input cannot crash the primary service. Do not assume fixes for pyasn1 OID decoding or CVE-2026-23490 mitigate this issue; this recursion flaw requires the 0.6.3 fix or an equivalent downstream backport.
How to confirm the fix worked
Confirm that all runtime environments resolve pyasn1 to version 0.6.3 or later using package inventory, lockfiles, container image scans, and runtime checks such as `python -m pip show pyasn1` or equivalent dependency tooling. Inspect dependency trees for transitive inclusion through packages that parse ASN.1, certificates, LDAP, Kerberos, SNMP, PKI, or identity protocols. Validate that rebuilt artifacts, deployed containers, and virtual environments no longer contain older pyasn1 versions. For exposure testing, use a controlled non-production environment to send deeply nested ASN.1 inputs to relevant parsing paths and verify the application rejects the input safely without process termination, OOM events, or repeated RecursionError crashes.
Typical attack path
- Find a service, API, agent, message queue consumer, authentication component, certificate parser, or file import feature that accepts ASN.1-encoded input.
- Confirm or infer that the application uses pyasn1 before version 0.6.3 to decode the supplied data.
- Craft ASN.1 input containing thousands of nested SEQUENCE (0x30) or SET (0x31) elements with indefinite-length (0x80) markers.
- Submit the payload to the reachable parsing path without needing credentials or user interaction.
- Trigger uncontrolled recursive decoding until the Python process raises RecursionError, exhausts memory, or is terminated.
- Repeat requests or submissions to keep the affected service degraded or unavailable.
How to detect it
To determine whether this was already exploited, review application logs, Python exception logs, service manager logs, container orchestration events, reverse proxy logs, and operating system memory/OOM logs for crashes or restarts correlated with requests, messages, uploads, or protocol inputs carrying ASN.1-like data. Look for repeated RecursionError exceptions, maximum recursion depth messages, MemoryError events, worker process exits, OOM killer messages, container restarts, and spikes in 5xx responses against endpoints or consumers that parse certificates, ASN.1 blobs, PKI data, LDAP/Kerberos/SNMP-related inputs, or uploaded binary payloads. Investigate clusters of failures from the same source IP, user agent, message producer, queue topic, or file ingestion source. In Python stack traces, look for pyasn1 decoder frames around ber/der/cer decoding immediately before RecursionError or process termination. Network payloads may contain long runs of nested ASN.1 constructed tags, especially repeated 0x30 0x80 or 0x31 0x80 byte sequences, although encrypted transport may require endpoint or application-layer logging to observe them.
- RecursionError: maximum recursion depth exceeded
- RecursionError: maximum recursion depth exceeded while calling a Python object
- MemoryError
- pyasn1.codec.ber.decoder
- pyasn1.codec.der.decoder
- pyasn1.codec.cer.decoder
- 0x30 0x80 0x30 0x80
- 0x31 0x80 0x31 0x80
- Killed process
- Out of memory: Killed process
- oom-kill
- OOMKilled
- CrashLoopBackOff
- maximum recursion depth exceeded
What your security team should do
- Inventory all applications, containers, virtual environments, and third-party components that include pyasn1, prioritizing internet-facing and unauthenticated parsing paths.
- Upgrade or backport pyasn1 version 0.6.3 or later and rebuild/redeploy affected artifacts rather than only updating source manifests.
- Review applications that process certificates, ASN.1 blobs, LDAP/Kerberos/SNMP/PKI data, signed messages, or uploaded binary files for reachable pyasn1 decoding paths.
- Add defensive limits around untrusted ASN.1 processing, including input-size limits, worker isolation, memory limits, timeouts, and safe handling of RecursionError and MemoryError.
- Search recent logs for Python recursion failures, memory exhaustion, OOM kills, and repeated malformed ASN.1 parsing errors from the same source addresses or workflows.
- Add monitoring and alerting for crash loops, sudden worker restarts, elevated 5xx responses, and memory spikes in services that depend on pyasn1.
- Because EPSS is currently low and there is no KEV listing, treat this as a priority availability fix for exposed services rather than evidence of confirmed exploitation, while still patching broadly during the next maintenance cycle.
The record
pyasn1 is a generic ASN.1 library for Python. Prior to 0.6.3, the `pyasn1` library is vulnerable to a Denial of Service (DoS) attack caused by uncontrolled recursion when decoding ASN.1 data with deeply nested structures. An attacker can supply a crafted payload containing thousands of nested `SEQUENCE` (`0x30`) or `SET` (`0x31`) tags with "Indefinite Length" (`0x80`) markers. This forces the decoder to recursively call itself until the Python interpreter crashes with a `RecursionError` or consumes all available memory (OOM), crashing the host application. This is a distinct vulnerability from CVE-2026-23490 (which addressed integer overflows in OID decoding). The fix for CVE-2026-23490 (`MAX_OID_ARC_CONTINUATION_OCTETS`) does not mitigate this recursion issue. Version 0.6.3 fixes this specific issue.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Chainguard | airflow-2 | 0 | 2.11.2-r3 |
| Chainguard | airflow-3 | 0 | 3.1.8-r9 |
| Chainguard | ansible-operator | 0 | 1.42.2-r0 |
| Chainguard | ansible-operator-fips | 0 | 1.42.2-r0 |
| Chainguard | apache-beam-python-3.12-sdk | 0 | 2.71.0-r1 |
| Chainguard | apache-beam-python-3.13-sdk | 0 | 2.71.0-r1 |
| Chainguard | authentik | 0 | 2026.2.1-r4 |
| Chainguard | authentik-fips | 0 | 2026.2.1-r3 |
| Chainguard | awx | 0 | 24.6.1-r31 |
| Chainguard | barman-cloudnative-pg | 0 | 3.18.0-r1 |
| Chainguard | datadog-agent-fips-7.76-core-integrations | 0 | 7.76.3-r4 |
| Chainguard | gitlab-toolbox-ce-18.7 | 0 | 18.7.5-r1 |
| Chainguard | gitlab-toolbox-ce-18.8 | 0 | 18.8.5-r1 |
| Chainguard | gitlab-toolbox-ce-18.9 | 0 | 18.9.2-r1 |
| Chainguard | gitlab-toolbox-ce-fips-18.7 | 0 | 18.7.5-r1 |
| Chainguard | gitlab-toolbox-ce-fips-18.8 | 0 | 18.8.5-r1 |
| Chainguard | gitlab-toolbox-ce-fips-18.9 | 0 | 18.9.2-r1 |
| Chainguard | k8s-sidecar | 0 | 2.5.1-r2 |
| Chainguard | keep-api | 0 | 0.51.0-r0 |
| Chainguard | keep-api-fips | 0 | 0.51.0-r0 |
| Chainguard | kubeflow-jupyter-web-app | 0 | 1.10.0-r13 |
| Chainguard | kubeflow-pipelines-apiserver | 0 | 2.16.0-r9 |
| Chainguard | kubeflow-pipelines-visualization-server | 0 | 2.16.0-r2 |
| Chainguard | kubeflow-volumes-web-app | 0 | 1.10.0-r12 |
| Chainguard | label-studio | 0 | 1.23.0-r1 |
| Chainguard | litellm | 0 | 1.82.3.0-r0 |
| Chainguard | localstack | 0 | 4.14.0-r4 |
| Chainguard | metaflow-service | 0 | 2.5.0-r7 |
| Chainguard | metaflow-service-fips | 0 | 2.5.0-r1 |
| Chainguard | mlflow | 0 | 3.10.1-r1 |
| Chainguard | mlflow-iamguarded-compat | 0 | 3.10.1-r1 |
| Chainguard | pgadmin4 | 0 | 9.13-r2 |
| Chainguard | pgadmin4-fips | 0 | 9.13-r1 |
| Chainguard | py3-cassandra-medusa | 0 | 0.27.0-r5 |
| Chainguard | request-1276 | 0 | 0.27.0-r6 |
| Chainguard | spamcheck | 0 | 3.5.3-r8 |
| Chainguard | superset-5.0 | 0 | 5.0.0-r21 |
| Chainguard | superset-6.0 | 0 | 6.0.0-r6 |
| Chainguard | synapse | 0 | 1.150.0-r0 |
| Chainguard | vllm-openai-cuda-12.9 | 0 | 0.17.1-r1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise Module for Public Cloud 15 SP4 | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise Module for Python 3 15 SP7 | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise Server 15 SP4-LTSS | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise Server 15 SP5-LTSS | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise Server 15 SP6-LTSS | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP4 | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP5 | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP6 | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| Wolfi | airflow-3 | 0 | 3.1.8-r9 |
| Wolfi | ansible-operator | 0 | 1.42.2-r0 |
| Wolfi | k8s-sidecar | 0 | 2.5.1-r2 |
| Wolfi | kubeflow-jupyter-web-app | 0 | 1.10.0-r13 |
| Wolfi | kubeflow-pipelines-apiserver | 0 | 2.16.0-r9 |
| Wolfi | kubeflow-pipelines-visualization-server | 0 | 2.16.0-r2 |
| Wolfi | kubeflow-volumes-web-app | 0 | 1.10.0-r12 |
| Wolfi | mlflow | 0 | 3.10.1-r1 |
| Wolfi | mlflow-iamguarded-compat | 0 | 3.10.1-r1 |
| Wolfi | py3-cassandra-medusa | 0 | 0.27.0-r5 |
| Wolfi | superset-5.0 | 0 | 5.0.0-r21 |
| Wolfi | superset-6.0 | 0 | 6.0.0-r6 |
| openSUSE:Leap 15.6 | python-pyasn1 | 0 | 0.5.0-150400.12.13.1 |
| openSUSE:Leap 16.0 | python-pyasn1 | 0 | 0.6.1-160000.4.1 |
| openSUSE:Tumbleweed | python-pyasn1 | 0 | 0.6.3-1.1 |
Related vulnerabilities
- CVE-2026-4539 A security flaw has been discovered in pygments up to 2.19.2. Also affects airflow-2
- CVE-2026-27448 pyOpenSSL is a Python wrapper around the OpenSSL library. Also affects airflow-2
- CVE-2026-27459 pyOpenSSL is a Python wrapper around the OpenSSL library. Also affects airflow-2
- CVE-2026-32597 PyJWT is a JSON Web Token implementation in Python. Also affects airflow-2
- CVE-2026-31958 Tornado is a Python web framework and asynchronous networking library. Also affects airflow-2
- CVE-2026-25604 In AWS Auth manager, the origin of the SAML authentication has been used as provided by… Also affects airflow-2
- CVE-2025-69219 A user with access to the DB could craft a database entry that would result in executing… Also affects airflow-2
- CVE-2026-27199 Werkzeug is a comprehensive WSGI web application library. Also affects airflow-2