Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain encrypted ZIP archive
-
DeliveryExtract plaintext CRC32 from header
-
ExploitGenerate candidate plaintexts
-
ExecutionCompute CRC32 for each candidate
-
PersistCompare against stored value
-
ImpactIdentify correct plaintext
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Use of incorrect operator
|
| Exploitation Conditions | The vulnerability requires the attacker to possess or access the encrypted ZIP archive itself; remote network exploitation is not possible. The archive must contain files encrypted with pyzipper versions prior to 0.4.0 using AES encryption (AE-1 format). Exploitation is practical only against files with small or low-entropy plaintext content (approximately under 20 bytes uncompressed or with predictable/limited value space such as passwords, PINs, or short tokens). Files with large or high-entropy content (images, PDFs, random data, or files >20 bytes of random material) are not practically at risk under current computational constraints. Unseekable ZIP archives exhibit additional behavior where CRC32 values are written to data descriptors, but this does not mitigate the underlying vulnerability for seekable archives. No authentication, special configuration, or user interaction is required once the archive is obtained. |
| Impact | CVSS 6.2 (AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) indicates local attack vector with high confidentiality impact but no integrity or availability impact. However, this CVSS vector does not align with the actual vulnerability mechanics: the attack requires an attacker to possess the encrypted archive (implying prior access or theft) but does not require local code execution on the victim's system-the CRC32 brute-force can be performed entirely offline on attacker-controlled infrastructure. The true risk is highly granular: files below ~20 bytes or with low entropy (passwords, small integers, predictable data) face practical cryptanalysis; large or high-entropy files remain computationally safe. No active exploitation, POC, or KEV status has been identified. The vulnerability is a cryptographic weakness rather than a remote code execution or system compromise vector. Organizations should prioritize re-encryption of sensitive small files or low-entropy content archived with vulnerable versions; bulk encrypted archives of large files pose minimal real-world risk unless they contain multiple small-file targets. Missing data: no EPSS score provided; exploit automation feasibility and prevalence are unknowns. |
| Exploit ScenarioDerived | An attacker obtains an encrypted ZIP file created with vulnerable pyzipper (e.g., via email interception, cloud storage breach, or insider access). The attacker extracts the plaintext CRC32 checksum from the ZIP local file header without decryption. If the archive contains small files (e.g., a 4-byte PIN or 8-byte token), the attacker generates candidate plaintexts, computes CRC32 for each, and compares against the stored value to identify the correct plaintext in seconds to minutes. Large files or high-entropy data (e.g., a 1 MB image or random key) would require exhaustive search across trillions of CRC32 matches, making the attack infeasible. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – May 14, 2026
pyzipper before version 0.4.0 fails to use AE-2 encryption format due to an operator precedence bug, causing CRC32 checksums to be stored unencrypted in ZIP headers. Attackers with access to encrypted archives can extract plaintext CRC32 values and conduct brute-force attacks on small or low-entropy files to recover their content without decrypting the AES encryption itself. Large or high-entropy files remain practically safe under current computational constraints, but the vulnerability represents a cryptographic bypass for files under approximately 20 bytes.
RemediationAI
Upgrade pyzipper to version 0.4.0 or later, which changes the default encryption format to AE-2 and excludes CRC32 values from headers. For archives created with vulnerable versions containing sensitive small files or low-entropy content, re-encrypt the entire archive by extracting and re-zipping with the patched version 0.4.0 to ensure CRC32 values are removed from local file headers. Do not attempt in-place modification, as orphaned headers with CRC values may persist in the archive. Developers should audit application code to confirm pyzipper version and review any ZIP archives created with versions prior to 0.4.0 for exposure to small or low-entropy encrypted files. If immediate upgrade is not possible, explicitly force AE-2 format in pyzipper API calls until the library can be updated. For archived data at rest, prioritize re-encryption of archives containing short-form data (passwords, keys, metadata) over bulk archives of large files.
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
pyzipper is a Python library that extends the standard zipfile module to add AES encryption support for ZIP archives. The vulnerability stems from a Python operator precedence bug in pyzipper/zipfile_aes.py that prevents automatic selection of the AE-2 encryption format. AE-1 format stores plaintext CRC32 checksums in unencrypted ZIP local file headers, while AE-2 excludes these checksums entirely. The bug forces all encrypted entries into AE-1 format unless explicitly overridden. CRC32 is a 32-bit cyclic redundancy check with approximately 4.3 billion possible values-exhaustible through brute-force when plaintext space is small. The vulnerability affects the pkg:pip/pyzipper package on PyPI. The root cause is classified as CWE-480 (Use of Incorrect Operator).
Know when Python 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:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Primary rating from Vendor (https://github.com/danifus/pyzipper) · only source for this CVE.
CVSS VectorVendor: https://github.com/danifus/pyzipper
DescriptionCVE.org
Impact
A Python operator precedence bug in pyzipper/zipfile_aes.py caused the AE-2 format to never be automatically selected during encryption, regardless of file size or compression type. As a result, all encrypted entries are written in AE-1 format unless AE-2 is explicitly forced by the caller. AE-1 stores the plaintext CRC32 checksum unencrypted in the ZIP header. During investigation of this issue, it was also found that when writing to an unseekable zip archive, the CRC32 value was always written to the datadescripter section.
The AES encryption itself is not broken. An attacker who possesses the archive can read the CRC32 from the header without decrypting anything, then brute-force candidate plaintexts by computing CRC32(candidate) and comparing against the stored value. In practice, this attack is feasible today only against small or low-entropy files, as CRC32 exhaustion across a large plaintext space is computationally prohibitive on current hardware. Files with high-entropy or large content are not practically at risk under current computing constraints. Without this bug, pyzipper would have removed the CRC32 value for any file with content of less than 20 bytes uncompressed.
Patches
Upgrade to pyzipper 0.4.0 that changes the default behaviour of pyzipper to always use the AE-2 format and exclude the CRC32 values, unless instructed to do otherwise.
If rewriting the zip archive to remove the CRC values for small files, the entire zip archive should be recreated to avoid the original local file header with the CRC included remaining in the zip file in a detached state.
Credit
Thanks to Lucas Lavarello from Kulkan Security for identifying this issue.
References
https://www.winzip.com/en/support/aes-encryption/#CRC https://www.winzip.com/en/support/aes-encryption/#crc-faq
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
EUVD-2026-45221
GHSA-crqm-m339-7m2p
NVD
CVE.org
EPSS
VulDB
Exploit-DB