{"id":"CVE-2026-119194","aliases":["AZL-112460","DEBIAN-CVE-2026-119194","EUVD-2026-113350","GHSA-fm9c-5rcf-2q5p","OESA-2026-4786","OESA-2026-4787","OESA-2026-4788","OESA-2026-4789","UBUNTU-CVE-2026-119194","USN-9011-1","openSUSE-SU-2026:12491-1"],"status":"published","title":"pyasn1: Quadratic CPU use in schemaless BER/CER/DER container decoding","description":"pyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component's TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.","severity":{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00425,"percentile":0.37277,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-407"],"published":"2026-10-29T19:38:14Z","modified":"2026-11-11T12:45:11Z","fixes":[{"ecosystem":"PyPI","package":"pyasn1","fixed_in":["0.6.5"],"sources":["ghsa","osv"]},{"ecosystem":"Debian:14","package":"pyasn1","fixed_in":["0.6.5-1"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:18.04:LTS","package":"pyasn1","fixed_in":["0.4.2-3ubuntu0.18.04.1~esm2"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:20.04:LTS","package":"pyasn1","fixed_in":["0.4.2-3ubuntu0.20.04.1~esm2"],"sources":["osv"]},{"ecosystem":"Ubuntu:22.04:LTS","package":"pyasn1","fixed_in":["0.4.8-1ubuntu0.4"],"sources":["osv"]},{"ecosystem":"Ubuntu:24.04:LTS","package":"pyasn1","fixed_in":["0.4.8-4ubuntu0.4"],"sources":["osv"]},{"ecosystem":"Ubuntu:26.10","package":"pyasn1","fixed_in":["0.6.4-1ubuntu0.1"],"sources":["osv"]},{"ecosystem":"Ubuntu:26.04:LTS","package":"pyasn1","fixed_in":["0.6.3-1ubuntu0.2"],"sources":["osv"]},{"ecosystem":"openSUSE:Tumbleweed","package":"python-pyasn1","fixed_in":["0.6.5-1.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0.3.3"},{"fixed":"0.6.5"}]}]},{"source":"osv","ecosystem":"Azure Linux:3","package":"python-pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"0.4.8-3"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["0.4.8-3","0.4.8-3+deb12u1","0.4.8-3+deb12u2","0.4.8-3+deb12u3","0.4.8-4","0.5.1-1","0.6.0-1","0.6.1-1","0.6.2-1","0.6.2-1~bpo13+1","0.6.3-1","0.6.4-1","0.6.4-1~bpo13+1","0.6.5-1"]},{"source":"osv","ecosystem":"Debian:13","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["0.6.1-1","0.6.1-1+deb13u1","0.6.1-1+deb13u2","0.6.1-1+deb13u3","0.6.2-1","0.6.2-1~bpo13+1","0.6.3-1","0.6.4-1","0.6.4-1~bpo13+1","0.6.5-1"]},{"source":"osv","ecosystem":"Debian:14","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.6.5-1"}]}],"versions":["0.6.1-1","0.6.2-1","0.6.2-1~bpo13+1","0.6.3-1","0.6.4-1","0.6.4-1~bpo13+1"]},{"source":"osv","ecosystem":"PyPI","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0.3.3"},{"fixed":"0.6.5"}]}],"versions":["0.3.3","0.3.4","0.3.5","0.3.6","0.3.7","0.4.1","0.4.2","0.4.3","0.4.4","0.4.5","0.4.6","0.4.7","0.4.8","0.5.0","0.5.1","0.6.0","0.6.1","0.6.2","0.6.3","0.6.4"]},{"source":"osv","ecosystem":"openEuler:24.03-LTS-SP1","package":"python-pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.5.1-5.oe2403sp1"}]}],"bundled":4},{"source":"osv","ecosystem":"openEuler:24.03-LTS-SP3","package":"python-pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.5.1-5.oe2403sp3"}]}],"bundled":4},{"source":"osv","ecosystem":"openEuler:24.03-LTS-SP4","package":"python-pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.5.1-5.oe2403sp4"}]}],"bundled":4},{"source":"osv","ecosystem":"openEuler:22.03-LTS-SP4","package":"python-pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.4.8-8.oe2203sp4"}]}],"bundled":4},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.4.2-3ubuntu0.18.04.1~esm2"}]}],"versions":["0.1.9-2","0.4.2-3","0.4.2-3ubuntu0.18.04.1~esm1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.4.2-3ubuntu0.20.04.1~esm2"}]}],"versions":["0.4.2-3","0.4.2-3build1","0.4.2-3ubuntu0.20.04.1~esm1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.4.8-1ubuntu0.4"}]}],"versions":["0.4.8-1","0.4.8-1ubuntu0.1","0.4.8-1ubuntu0.2","0.4.8-1ubuntu0.3"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.4.8-4ubuntu0.4"}]}],"versions":["0.4.8-4","0.4.8-4ubuntu0.1","0.4.8-4ubuntu0.2","0.4.8-4ubuntu0.3"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.6.4-1ubuntu0.1"}]}],"versions":["0.6.3-1","0.6.4-1"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.6.3-1ubuntu0.2"}]}],"versions":["0.6.1-1","0.6.1-1build1","0.6.2-1","0.6.3-1","0.6.3-1ubuntu0.1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:14.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.1.7-1ubuntu2.1+esm2"}]}],"versions":["0.1.4-0ubuntu1","0.1.7-1ubuntu1","0.1.7-1ubuntu2","0.1.7-1ubuntu2.1","0.1.7-1ubuntu2.1+esm1"],"bundled":7},{"source":"osv","ecosystem":"Ubuntu:Pro:16.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.1.9-1ubuntu0.1~esm2"}]}],"versions":["0.1.8-2","0.1.9-1","0.1.9-1ubuntu0.1~esm1"],"bundled":7},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.4.2-3ubuntu0.18.04.1~esm2"}]}],"versions":["0.1.9-2","0.4.2-3","0.4.2-3ubuntu0.18.04.1~esm1"],"bundled":7},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.4.2-3ubuntu0.20.04.1~esm2"}]}],"versions":["0.4.2-3","0.4.2-3build1","0.4.2-3ubuntu0.20.04.1~esm1"],"bundled":7},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.4.8-1ubuntu0.4"}]}],"versions":["0.4.8-1","0.4.8-1ubuntu0.1","0.4.8-1ubuntu0.2","0.4.8-1ubuntu0.3"],"bundled":7},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.4.8-4ubuntu0.4"}]}],"versions":["0.4.8-4","0.4.8-4ubuntu0.1","0.4.8-4ubuntu0.2","0.4.8-4ubuntu0.3"],"bundled":7},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.6.4-1ubuntu0.1"}]}],"versions":["0.6.3-1","0.6.4-1"],"bundled":7},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.6.3-1ubuntu0.2"}]}],"versions":["0.6.1-1","0.6.1-1build1","0.6.2-1","0.6.3-1","0.6.3-1ubuntu0.1"],"bundled":7},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"python-pyasn1","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"0.6.5-1.1"}]}]}],"products":[{"vendor":"pyasn1","product":"pyasn1"}],"references":[{"url":"https://github.com/pyasn1/pyasn1/security/advisories/GHSA-fm9c-5rcf-2q5p","tags":["x_refsource_CONFIRM","exploit","advisory","web","report"]},{"url":"https://github.com/pyasn1/pyasn1/pull/132","tags":["x_refsource_MISC","fix","web","report"]},{"url":"https://github.com/pyasn1/pyasn1/commit/a36e3a3d067148d26197a6b7221fd0e2cde9cc86","tags":["x_refsource_MISC","fix","web","report"]},{"url":"https://github.com/pyasn1/pyasn1/releases/tag/v0.6.5","tags":["x_refsource_MISC","web","report"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-119194","tags":["web","advisory"]},{"url":"https://github.com/advisories/GHSA-fm9c-5rcf-2q5p"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/119xxx/CVE-2026-119194.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-119194","tags":["advisory"]},{"url":"https://github.com/pyasn1/pyasn1","tags":["package"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-4786","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-119195","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-119196","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-119197","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-4787","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-4788","tags":["advisory"]},{"url":"https://www.openeuler.org/zh/security/security-bulletins/detail/?id=openEuler-SA-2026-4789","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-119194","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-119194","tags":["report"]},{"url":"https://ubuntu.com/security/notices/USN-9011-1","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-59884","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-59885","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-59886","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-119195","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-119196","tags":["report"]},{"url":"https://ubuntu.com/security/CVE-2026-119197","tags":["report"]},{"url":"","tags":["advisory"]},{"url":"https://www.suse.com/security/cve/CVE-2026-119194","tags":["web"]}],"sources":{"cve":[{"id":"CVE-2026-119194","title":"pyasn1: Quadratic CPU use in schemaless BER/CER/DER container decoding","description":"pyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component's TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.","status":"published","published":"2026-10-29T19:38:14.056Z","modified":"2026-11-03T16:23:36.217Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"cna"}],"cwes":["CWE-407"],"updated_at":"2026-11-03T17:29:02.209656Z"}],"euvd":[{"id":"EUVD-2026-113350","description":"pyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component's TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.","status":"published","published":"2026-10-29T19:38:14Z","modified":"2026-11-03T16:23:36Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-03T17:18:21.496138Z"}],"ghsa":[{"id":"GHSA-fm9c-5rcf-2q5p","title":"pyasn1 has quadratic CPU use in schemaless BER/CER/DER container decoding","description":"### Summary\n\nWhen an application decodes attacker-controlled BER, CER, or DER data without an ASN.1 schema, a container with many distinct long tag IDs can cause quadratic CPU use. Repeated inputs can exhaust CPU and reduce service availability.\n\n### Details\n\nConstructedPayloadDecoderBase._decodeComponentsSchemaless inserts every decoded component’s TagSet into a growing set, although it only needs to distinguish one tag set from two or more. Attacker-chosen tag IDs can have colliding TagSet hashes, making each later insertion compare against an increasing number of earlier tags. This path is present in v0.6.4 and is inherited by the CER and DER decoders. The proposed fix stops growing the classification set after it contains two distinct tag sets, while retaining every decoded component and its order.  On v0.6.4 with CPython 3.12.10, increasing the collision input from 3,200 to 6,400 components raised decode CPU time from 0.438 to 1.747 seconds; a comparable control rose from 0.031 to 0.065 seconds. Both inputs decoded successfully with the expected values and an empty remainder.\n\n### Proof of concept\n\nRun this outside the repository checkout in a fresh Python 3.12 environment with pyasn1==0.6.4 installed:\n\n```python\nimport sys\nimport time\n\nfrom pyasn1.codec.ber import decoder\nfrom pyasn1.type import univ\n\n\ndef enc_tag(tag_id):\n    groups = [tag_id \u0026 0x7f]\n    tag_id \u003e\u003e= 7\n    while tag_id:\n        groups.append((tag_id \u0026 0x7f) | 0x80)\n        tag_id \u003e\u003e= 7\n    return b'\\xbf' + bytes(reversed(groups))\n\n\ndef payload(tag_ids):\n    body = b''.join(enc_tag(tag_id) + b'\\x03\\x04\\x01A'\n                    for tag_id in tag_ids)\n    length = len(body).to_bytes((len(body).bit_length() + 7) // 8, 'big')\n    return b'\\x30' + bytes([0x80 | len(length)]) + length + body\n\n\nfor count in (3200, 6400):\n    cases = (\n        (\"collision\", [32 + i * sys.hash_info.modulus\n                       for i in range(count)]),\n        (\"control\", [(1 \u003c\u003c 70) + i for i in range(count)]),\n    )\n    for name, tag_ids in cases:\n        wire = payload(tag_ids)\n        start = time.process_time()\n        value, remainder = decoder.decode(wire)\n        cpu_seconds = time.process_time() - start\n\n        assert type(value) is univ.Sequence\n        assert len(value) == count and remainder == b''\n        for position, tag_id in enumerate(tag_ids):\n            component = value.getComponentByPosition(position)\n            assert component.asOctets() == b'A'\n            assert component.tagSet[-1].tagId == tag_id\n\n        print(count, name, len(wire), round(cpu_seconds, 3))\n```\n\n### Impact\n\nApplications that pass attacker-controlled bytes to schemaless BER, CER, or DER decoding can spend disproportionate CPU time on a relatively small, valid input. The demonstrated impact is availability; no confidentiality or integrity impact was observed.","status":"published","published":"2026-10-30T23:03:37Z","modified":"2026-10-30T23:03:39Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-407"],"updated_at":"2026-11-02T14:41:41.028239Z"}],"nvd":[{"id":"CVE-2026-119194","description":"pyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component's TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.","status":"published","published":"2026-10-29T20:17:30.48Z","modified":"2026-11-03T17:18:03.863Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"secondary"}],"cwes":["CWE-407"],"updated_at":"2026-11-03T20:18:18.523956Z"}],"osv":[{"id":"CVE-2026-119194","title":"pyasn1: Quadratic CPU use in schemaless BER/CER/DER container decoding","description":"pyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component's TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.","status":"published","published":"2026-10-29T19:38:14.056Z","modified":"2026-11-09T13:42:15.391088597Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-407"],"updated_at":"2026-11-07T03:08:01.41647Z"},{"id":"DEBIAN-CVE-2026-119194","description":"pyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component's TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.","status":"published","published":"2026-10-29T20:17:30.48Z","modified":"2026-11-04T09:47:31.424374813Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-04T10:05:32.187009Z"},{"id":"GHSA-fm9c-5rcf-2q5p","title":"pyasn1 has quadratic CPU use in schemaless BER/CER/DER container decoding","description":"### Summary\n\nWhen an application decodes attacker-controlled BER, CER, or DER data without an ASN.1 schema, a container with many distinct long tag IDs can cause quadratic CPU use. Repeated inputs can exhaust CPU and reduce service availability.\n\n### Details\n\nConstructedPayloadDecoderBase._decodeComponentsSchemaless inserts every decoded component’s TagSet into a growing set, although it only needs to distinguish one tag set from two or more. Attacker-chosen tag IDs can have colliding TagSet hashes, making each later insertion compare against an increasing number of earlier tags. This path is present in v0.6.4 and is inherited by the CER and DER decoders. The proposed fix stops growing the classification set after it contains two distinct tag sets, while retaining every decoded component and its order.  On v0.6.4 with CPython 3.12.10, increasing the collision input from 3,200 to 6,400 components raised decode CPU time from 0.438 to 1.747 seconds; a comparable control rose from 0.031 to 0.065 seconds. Both inputs decoded successfully with the expected values and an empty remainder.\n\n### Proof of concept\n\nRun this outside the repository checkout in a fresh Python 3.12 environment with pyasn1==0.6.4 installed:\n\n```python\nimport sys\nimport time\n\nfrom pyasn1.codec.ber import decoder\nfrom pyasn1.type import univ\n\n\ndef enc_tag(tag_id):\n    groups = [tag_id \u0026 0x7f]\n    tag_id \u003e\u003e= 7\n    while tag_id:\n        groups.append((tag_id \u0026 0x7f) | 0x80)\n        tag_id \u003e\u003e= 7\n    return b'\\xbf' + bytes(reversed(groups))\n\n\ndef payload(tag_ids):\n    body = b''.join(enc_tag(tag_id) + b'\\x03\\x04\\x01A'\n                    for tag_id in tag_ids)\n    length = len(body).to_bytes((len(body).bit_length() + 7) // 8, 'big')\n    return b'\\x30' + bytes([0x80 | len(length)]) + length + body\n\n\nfor count in (3200, 6400):\n    cases = (\n        (\"collision\", [32 + i * sys.hash_info.modulus\n                       for i in range(count)]),\n        (\"control\", [(1 \u003c\u003c 70) + i for i in range(count)]),\n    )\n    for name, tag_ids in cases:\n        wire = payload(tag_ids)\n        start = time.process_time()\n        value, remainder = decoder.decode(wire)\n        cpu_seconds = time.process_time() - start\n\n        assert type(value) is univ.Sequence\n        assert len(value) == count and remainder == b''\n        for position, tag_id in enumerate(tag_ids):\n            component = value.getComponentByPosition(position)\n            assert component.asOctets() == b'A'\n            assert component.tagSet[-1].tagId == tag_id\n\n        print(count, name, len(wire), round(cpu_seconds, 3))\n```\n\n### Impact\n\nApplications that pass attacker-controlled bytes to schemaless BER, CER, or DER decoding can spend disproportionate CPU time on a relatively small, valid input. The demonstrated impact is availability; no confidentiality or integrity impact was observed.","status":"published","published":"2026-10-30T23:03:37Z","modified":"2026-10-30T23:15:06.423863231Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-407"],"updated_at":"2026-11-02T15:46:46.760785Z"},{"id":"OESA-2026-4786","title":"python-pyasn1 security update","description":"Abstract Syntax Notation One (ASN.1) is a technology for exchanging structured data in a universally understood, hardware agnostic way. Many industrial, security and telephony applications heavily rely on ASN.1. The pyasn1 library implements ASN.1 support in pure-Python.\r\n\r\nSecurity Fix(es):\n\npyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component\u0026apos;s TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.(CVE-2026-119194)\n\npyasn1 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.(CVE-2026-119195)\n\npyasn1 is a generic ASN.1 library for Python. Prior to 0.6.5, constructed BIT STRING decoding repeatedly shifts and copies the complete bit value accumulated from earlier fragments. Attacker-controlled BER or CER input contains many constructed BIT STRING fragments; schema-driven DER also accepts a definite-length constructed BIT STRING. BitStringPayloadDecoder repeatedly calls BitString.fromOctetString with the prior bitString as prepend, shifting an ever-growing SizedInteger for each fragment and causing quadratic work. Large fragmented values can exhaust CPU during decode() without requiring later conversion or formatting. This issue is fixed in version 0.6.5.(CVE-2026-119196)\n\npyasn1 is a generic ASN.1 library for Python. Prior to 0.6.5, binary REAL decoding builds a large mantissa one octet at a time by shifting a growing integer and slicing the remaining byte string. Attacker-controlled ASN.1 includes a binary-encoded REAL with a large mantissa and reaches BER, CER, or DER decode(), with or without a schema containing REAL. RealPayloadDecoder.valueDecoder repeatedly performs a left shift, OR, and suffix copy for every mantissa octet, making decode time quadratic in mantissa length. A comparatively small REAL value can hold a decoding worker on one CPU core for seconds or longer and cause availability loss. This issue is fixed in version 0.6.5.(CVE-2026-119197)","status":"published","published":"2026-11-11T12:26:09Z","modified":"2026-11-11T12:45:11.084248728Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-11T13:08:46.301371Z"},{"id":"OESA-2026-4787","title":"python-pyasn1 security update","description":"Abstract Syntax Notation One (ASN.1) is a technology for exchanging structured data in a universally understood, hardware agnostic way. Many industrial, security and telephony applications heavily rely on ASN.1. The pyasn1 library implements ASN.1 support in pure-Python.\r\n\r\nSecurity Fix(es):\n\npyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component\u0026apos;s TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.(CVE-2026-119194)\n\npyasn1 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.(CVE-2026-119195)\n\npyasn1 is a generic ASN.1 library for Python. Prior to 0.6.5, constructed BIT STRING decoding repeatedly shifts and copies the complete bit value accumulated from earlier fragments. Attacker-controlled BER or CER input contains many constructed BIT STRING fragments; schema-driven DER also accepts a definite-length constructed BIT STRING. BitStringPayloadDecoder repeatedly calls BitString.fromOctetString with the prior bitString as prepend, shifting an ever-growing SizedInteger for each fragment and causing quadratic work. Large fragmented values can exhaust CPU during decode() without requiring later conversion or formatting. This issue is fixed in version 0.6.5.(CVE-2026-119196)\n\npyasn1 is a generic ASN.1 library for Python. Prior to 0.6.5, binary REAL decoding builds a large mantissa one octet at a time by shifting a growing integer and slicing the remaining byte string. Attacker-controlled ASN.1 includes a binary-encoded REAL with a large mantissa and reaches BER, CER, or DER decode(), with or without a schema containing REAL. RealPayloadDecoder.valueDecoder repeatedly performs a left shift, OR, and suffix copy for every mantissa octet, making decode time quadratic in mantissa length. A comparatively small REAL value can hold a decoding worker on one CPU core for seconds or longer and cause availability loss. This issue is fixed in version 0.6.5.(CVE-2026-119197)","status":"published","published":"2026-11-11T12:26:09Z","modified":"2026-11-11T12:45:03.182962994Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-11T13:08:46.301371Z"},{"id":"OESA-2026-4788","title":"python-pyasn1 security update","description":"Abstract Syntax Notation One (ASN.1) is a technology for exchanging structured data in a universally understood, hardware agnostic way. Many industrial, security and telephony applications heavily rely on ASN.1. The pyasn1 library implements ASN.1 support in pure-Python.\r\n\r\nSecurity Fix(es):\n\npyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component\u0026apos;s TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.(CVE-2026-119194)\n\npyasn1 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.(CVE-2026-119195)\n\npyasn1 is a generic ASN.1 library for Python. Prior to 0.6.5, constructed BIT STRING decoding repeatedly shifts and copies the complete bit value accumulated from earlier fragments. Attacker-controlled BER or CER input contains many constructed BIT STRING fragments; schema-driven DER also accepts a definite-length constructed BIT STRING. BitStringPayloadDecoder repeatedly calls BitString.fromOctetString with the prior bitString as prepend, shifting an ever-growing SizedInteger for each fragment and causing quadratic work. Large fragmented values can exhaust CPU during decode() without requiring later conversion or formatting. This issue is fixed in version 0.6.5.(CVE-2026-119196)\n\npyasn1 is a generic ASN.1 library for Python. Prior to 0.6.5, binary REAL decoding builds a large mantissa one octet at a time by shifting a growing integer and slicing the remaining byte string. Attacker-controlled ASN.1 includes a binary-encoded REAL with a large mantissa and reaches BER, CER, or DER decode(), with or without a schema containing REAL. RealPayloadDecoder.valueDecoder repeatedly performs a left shift, OR, and suffix copy for every mantissa octet, making decode time quadratic in mantissa length. A comparatively small REAL value can hold a decoding worker on one CPU core for seconds or longer and cause availability loss. This issue is fixed in version 0.6.5.(CVE-2026-119197)","status":"published","published":"2026-11-11T12:26:10Z","modified":"2026-11-11T12:45:06.691643578Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-11T13:08:46.301371Z"},{"id":"OESA-2026-4789","title":"python-pyasn1 security update","description":"Abstract Syntax Notation One (ASN.1) is a technology for exchanging structured data in a universally understood, hardware agnostic way. Many industrial, security and telephony applications heavily rely on ASN.1. The pyasn1 library implements ASN.1 support in pure-Python.\r\n\r\nSecurity Fix(es):\n\npyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component\u0026apos;s TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.(CVE-2026-119194)\n\npyasn1 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.(CVE-2026-119195)\n\npyasn1 is a generic ASN.1 library for Python. Prior to 0.6.5, constructed BIT STRING decoding repeatedly shifts and copies the complete bit value accumulated from earlier fragments. Attacker-controlled BER or CER input contains many constructed BIT STRING fragments; schema-driven DER also accepts a definite-length constructed BIT STRING. BitStringPayloadDecoder repeatedly calls BitString.fromOctetString with the prior bitString as prepend, shifting an ever-growing SizedInteger for each fragment and causing quadratic work. Large fragmented values can exhaust CPU during decode() without requiring later conversion or formatting. This issue is fixed in version 0.6.5.(CVE-2026-119196)\n\npyasn1 is a generic ASN.1 library for Python. Prior to 0.6.5, binary REAL decoding builds a large mantissa one octet at a time by shifting a growing integer and slicing the remaining byte string. Attacker-controlled ASN.1 includes a binary-encoded REAL with a large mantissa and reaches BER, CER, or DER decode(), with or without a schema containing REAL. RealPayloadDecoder.valueDecoder repeatedly performs a left shift, OR, and suffix copy for every mantissa octet, making decode time quadratic in mantissa length. A comparatively small REAL value can hold a decoding worker on one CPU core for seconds or longer and cause availability loss. This issue is fixed in version 0.6.5.(CVE-2026-119197)","status":"published","published":"2026-11-11T12:26:11Z","modified":"2026-11-11T12:45:06.747288033Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-11T13:08:46.301371Z"},{"id":"UBUNTU-CVE-2026-119194","description":"pyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component's TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.","status":"published","published":"2026-10-29T20:17:00Z","modified":"2026-11-11T09:37:13.409300529Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-11T10:01:18.620522Z"},{"id":"AZL-112460","title":"CVE-2026-119194 affecting package python-pyasn1 0.4.8-3","description":"pyasn1 is a generic ASN.1 library for Python. From 0.3.3 until 0.6.5, schemaless container decoding stores every decoded component's TagSet in a growing set even though only one-versus-multiple tag types must be distinguished. Attacker-controlled BER, CER, or DER input contains many distinct long tag IDs whose TagSet hashes collide. Each later set insertion compares against an increasing number of earlier colliding tags in ConstructedPayloadDecoderBase._decodeComponentsSchemaless, producing quadratic CPU work while decoded values and order remain valid. Repeated inputs can exhaust decoder CPU and reduce service availability. This issue is fixed in version 0.6.5.","status":"published","published":"2026-10-29T20:17:30Z","modified":"2026-11-05T05:40:51Z","updated_at":"2026-11-05T16:41:19.001909Z"},{"id":"openSUSE-SU-2026:12491-1","title":"python313-pyasn1-0.6.5-1.1 on GA media","description":"These are all security issues fixed in the python313-pyasn1-0.6.5-1.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-11-08T00:00:00Z","modified":"2026-11-09T13:30:03.341248069Z","updated_at":"2026-11-09T14:01:18.614326Z"},{"id":"USN-9011-1","title":"pyasn1 vulnerabilities","description":"It was discovered that pyasn1 did not properly bound the size of long-form\ntag identifiers when parsing BER, CER, or DER encoded data. An attacker\ncould possibly use this issue to cause applications decoding untrusted\nASN.1 data to consume excessive CPU resources, resulting in a denial of\nservice. This issue only affected Ubuntu 14.04 LTS, Ubuntu 16.04 LTS,\nUbuntu 18.04 LTS, and Ubuntu 20.04 LTS. (CVE-2026-59884)\n\nIt was discovered that pyasn1 processed OBJECT IDENTIFIER and RELATIVE-OID\nvalues in quadratic time relative to the number of arcs. An attacker could\npossibly use this issue to cause applications decoding untrusted ASN.1 data\nto consume excessive CPU resources, resulting in a denial of service. This\nissue only affected Ubuntu 14.04 LTS, Ubuntu 16.04 LTS, Ubuntu 18.04 LTS,\nand Ubuntu 20.04 LTS. (CVE-2026-59885)\n\nIt was discovered that pyasn1 incorrectly handled conversion of decoded\nREAL values to Python float types. An attacker could possibly use this\nissue to cause applications decoding untrusted ASN.1 data to consume\nexcessive CPU and memory resources, resulting in a denial of service. This\nissue only affected Ubuntu 14.04 LTS, Ubuntu 16.04 LTS, Ubuntu 18.04 LTS,\nand Ubuntu 20.04 LTS. (CVE-2026-59886)\n\nIt was discovered that pyasn1 incorrectly handled tracking component types\nwhen decoding containers without a schema. An attacker could possibly use\nthis issue to cause applications decoding untrusted ASN.1 data to consume\nexcessive CPU resources, resulting in a denial of service. This issue only\naffected Ubuntu 18.04 LTS, Ubuntu 20.04 LTS, Ubuntu 22.04 LTS, Ubuntu 24.04\nLTS, Ubuntu 26.04 LTS, and Ubuntu 26.10. (CVE-2026-119194)\n\nIt was discovered that pyasn1 processed fragmented constructed strings and\nindefinite-length ANY values in quadratic time. An attacker could possibly\nuse this issue to cause applications decoding untrusted ASN.1 data to\nconsume excessive CPU resources, resulting in a denial of service. This\nissue was only addressed in Ubuntu 26.04 LTS and Ubuntu 26.10.\n(CVE-2026-119195)\n\nIt was discovered that pyasn1 processed fragmented constructed BIT STRING\nvalues in quadratic time. An attacker could possibly use this issue to\ncause applications decoding untrusted ASN.1 data to consume excessive CPU\nresources, resulting in a denial of service. (CVE-2026-119196)\n\nIt was discovered that pyasn1 processed binary-encoded REAL values with\nlarge mantissas in quadratic time. An attacker could possibly use this\nissue to cause applications decoding untrusted ASN.1 data to consume\nexcessive CPU resources, resulting in a denial of service.\n(CVE-2026-119197)","status":"published","published":"2026-11-09T16:15:14Z","modified":"2026-11-11T09:44:35.505565692Z","updated_at":"2026-11-10T03:21:46.325253Z"}]}}
