Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend crafted fragmented BER/CER ASN.1 to decoder
-
ExploitTrigger quadratic constructed-string or indefinite-ANY reassembly
-
ExecutionConsume seconds of CPU per decode worker
-
ImpactRepeat to exhaust CPU and deny service
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Algorithmic complexity limits
|
| Exploitation Conditions | The affected application must pass attacker-controlled ASN.1 into pyasn1's decode() or StreamingDecoder path without enforcing input-size or decoder CPU limits. Concrete trigger paths differ by codec: BER and conforming CER accept constructed OCTET STRING and inherited character strings (UTF8String, PrintableString, IA5String, BMPString, GeneralizedTime, etc.) directly; the indefinite-length ANY path is reached in BER/CER only when an asn1Spec selects univ.Any; the DER decoder reaches the loop only via der.decode(data, asn1Spec=univ.OctetString()) for a definite-length constructed OCTET STRING, or via a constructed character string decoded without a schema, while DER rejects schemaless constructed OCTET STRING and all indefinite lengths. Limiting factors: effective abuse needs megabyte-scale, highly fragmented input and the absence of application-level size/CPU caps; no privileges, authentication, or user interaction are required, but the vendor states that whether the decoder is reachable pre-authentication or through a particular protocol is application-specific and not established by the library finding. |
| Impact | The input CVSS of 7.5 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) is an explicitly library-level, availability-only score that the GHSA advisory says assumes 'a reasonable application that automatically decodes attacker-supplied ASN.1 from unauthenticated network input.' The vector signals remote, low-complexity, unauthenticated reach with no confidentiality or integrity impact - consistent with a CWE-407 quadratic-time DoS. Decision signals are mixed and partly absent: the vuln.today priority is 'this_week' (prompt patching, not emergency/act_now); no CISA KEV entry is present in the input, so there is no confirmed active exploitation; and no EPSS score was supplied, so exploitation probability cannot be weighed. A public reproduction script is published in the GHSA advisory, but a reproducer is not the same as confirmed in-the-wild use. Net assessment: this is a genuine but deployment-gated availability risk rather than a drop-everything event - the raw 7.5 overstates real risk for the many adopters that do not expose a pyasn1 decoder to untrusted, size-unbounded ASN.1, and understates it for services (SNMP, LDAP, certificate/X.509 or other ASN.1 parsers) that do. The vendor itself cautions that whether the flaw is reachable pre-authentication or via a given protocol depends on the application, so prioritize by whether your deployment decodes attacker-controlled ASN.1. |
| Exploit ScenarioDerived | An unauthenticated attacker submits a megabyte-scale ASN.1 message built from many small constructed OCTET STRING or character-string fragments (or an indefinite-length ANY) to a service that decodes it with pyasn1 ≤ 0.6.4; the growing-bytes reassembly performs O(N²) copying and ties up a decoding worker for seconds per message. Repeated submissions exhaust available decoder workers and CPU, denying service while the attack continues. A working proof-of-concept reproducer is published in the GHSA advisory, though it is not verified as a weaponized exploit against a specific product. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 29, 2026
Quadratic-time CPU exhaustion in pyasn1 0.6.4 and earlier allows remote, unauthenticated attackers to tie up decoding workers by supplying highly fragmented ASN.1 input - constructed BER/CER OCTET STRING or character-string values, or indefinite-length ANY content when an asn1Spec selects univ.Any - that is reassembled with repeated growing-bytes concatenation. The DER codec is also reachable through der.decode(data, asn1Spec=univ.OctetString()) for a definite-length constructed OCTET STRING and through constructed character strings used without a schema, even though those encodings are not valid DER. Impact is availability only (CVSS 7.5, C:N/I:N/A:H); the vendor rates the issue as requiring an application that decodes untrusted ASN.1 without size or CPU limits, and states that pre-authentication reachability through a specific protocol is application-specific. Fixed in pyasn1 0.6.5, which reassembles fragments in a list and joins once; a reproducibility PoC is published in the GHSA advisory, but no confirmed working exploit code and no active exploitation (CISA KEV) have been identified, so this is prioritized for patching this week rather than treated as an emergency.
RemediationAI
Vendor-released patch: upgrade to pyasn1 0.6.5, which replaces the growing bytes accumulators with a fragment list joined once after decoding across the OCTET STRING, inherited character-string and indefinite-length ANY loops (upstream fix in https://github.com/pyasn1/pyasn1/pull/132, commit 4ce00797c594b59c1fd6b86d9ebc3ba87b7ec9f9, release https://github.com/pyasn1/pyasn1/releases/tag/v0.6.5). Note that 0.6.5 also changes nested constructed OCTET STRING handling so inner fragments contribute their decoded octets, so regression-test decoded values, not just timing, after upgrading. If upgrading cannot be done immediately, enforce application-appropriate limits on the size of untrusted ASN.1 input before it reaches pyasn1 and cap CPU available to decoding workers, accepting that a sufficiently permissive byte limit still allows multi-second stalls; applications that require DER can additionally reject constructed string encodings before invoking the decoder, at the cost of rejecting some BER-origin data that currently decodes successfully. The vendor states that a byte limit depends on protocol and expected valid values, and that upgrading is the complete fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
pyasn1 is a pure-Python ASN.1 implementation whose BER, CER and DER codecs follow ITU-T X.690. In v0.6.4, OctetStringPayloadDecoder accumulates each decoded fragment with 'header += component' in both its definite-length and indefinite-length constructed paths, and AnyPayloadDecoder.indefLenValueDecoder does the same with 'chunk += component'; because each concatenation copies the growing prefix, N fixed-size fragments cost O(N²) - the CWE-407 (inefficient algorithm complexity) root cause. The OCTET STRING decoder is the base class for UTF8String, NumericString, PrintableString, TeletexString, VideotexString, IA5String, GraphicString, VisibleString, GeneralString, UniversalString, BMPString, ObjectDescriptor, GeneralizedTime and UTCTime, so all of those inherit the same reassembly loop. The DER codec replaces the tag-driven decoder for OCTET STRING but keeps the BER-derived decoder in its schema-driven TYPE_MAP, so schemaless constructed OCTET STRING is rejected while der.decode(..., asn1Spec=univ.OctetString()) reaches the loop; inherited character-string decoders are untouched by DER, so a constructed UTF8String is accepted without a schema. Definite-length constructed strings are valid BER and accepted by CER, but are not conforming CER/DER encodings; conforming CER layouts (indefinite outer length, ~1,000 content octets per fragment) still reach the loop, and indefinite-length ANY is reachable in BER and CER only with an asn1Spec selecting univ.Any. The decoder's eight-octet length limit and nesting-depth limit do not bound the number of sibling fragments. This is a distinct decoder path from the OID/RELATIVE-OID accumulation issue tracked as CVE-2026-59885; the 0.6.5 release addresses several related complexity flaws together (binary REAL mantissa decoding, constructed BIT STRING reassembly, and schemaless container tag tracking).
Know when Pyasn1 gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Remote, no privileges or interaction and low complexity for the BER/CER string path; availability-only CPU exhaustion gives A:H with C:N/I:N, matching the library-level unauthenticated-decode assumption.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
pyasn1 is a generic ASN.1 library for Python. Prior to 0.6.5, constructed string and indefinite-length ANY decoding repeatedly concatenates each fragment onto a growing bytes value. Attacker-controlled BER or CER data can use many constructed OCTET STRING or character-string fragments. DER rejects constructed OCTET STRING without a schema, but accepts its definite-length form when asn1Spec selects univ.OctetString; it also accepts constructed character strings such as UTF8String without a schema, even though those encodings are not valid DER. The separate indefinite-length ANY path is reachable in BER and CER when asn1Spec selects univ.Any; DER rejects indefinite lengths. OctetStringPayloadDecoder uses growing header concatenation and AnyPayloadDecoder.indefLenValueDecoder uses growing chunk concatenation, repeatedly copying an increasing prefix and causing quadratic work. A sufficiently fragmented value can occupy decoding workers and cause CPU exhaustion without confidentiality or integrity impact. This issue is fixed in version 0.6.5.
Blast Radius
ecosystem impact- 22,721 pypi packages depend on pyasn1 (501 direct, 22,344 indirect)
Ecosystem-wide dependent count for version 0.6.5.
Technical POC Analysis
CWE-407, Inefficient Algorithmic Complexity.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
1 PoC candidate from github (unverified)
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
CVE-2026-119195 is a high-severity denial-of-service vulnerability in pyasn1 (versions ≤0.6.4) that can be triggered by unauthenticated remote attackers sending specially crafted ASN.1 data, causing CPU exhaustion and potential service disruption for applications that decode untrusted ASN.1. Organizations using pyasn1 in network-facing services or data processing pipelines should prioritize patching to avoid availability incidents.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Quadratic CPU consumption in pyasn1's schemaless BER/CER/DER container decoder (versions 0.3.3 through 0.6.4) lets remot
pyasn1 is a generic ASN.1 library for Python. versions up to 0.6.2 is affected by allocation of resources without limits
Quadratic-time denial of service in pyasn1 0.6.4 and earlier lets an attacker who can feed ASN.1 data into the library's
Quadratic CPU consumption in pyasn1 through 0.6.4 lets an attacker who controls ASN.1 input keep a decoder worker busy f
Denial of service in the pyasn1 Python ASN.1 library (versions prior to 0.6.4) allows a remote attacker to exhaust CPU a
Denial of service in the pyasn1 Python ASN.1 library (all versions prior to 0.6.4) allows remote attackers to exhaust CP
Uncontrolled resource consumption in the pyasn1 Python ASN.1 library (versions prior to 0.6.4) lets remote attackers han
EUVD-2026-113351
GHSA-9m75-vc3g-4x39
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB