Skip to main content

pyzipper CVE-2026-44722

| EUVDEUVD-2026-45221 MEDIUM
Use of Incorrect Operator (CWE-480)
2026-05-14 https://github.com/danifus/pyzipper GHSA-crqm-m339-7m2p PYSEC-2026-3044
6.2
CVSS 3.1 · Vendor: https://github.com/danifus/pyzipper
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain encrypted ZIP archive
  2. Delivery
    Extract plaintext CRC32 from header
  3. Exploit
    Generate candidate plaintexts
  4. Execution
    Compute CRC32 for each candidate
  5. Persist
    Compare against stored value
  6. Impact
    Identify 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

pyzipper < 0.4.0

Affected Packages

pypi pyzipper fix: 0.4.0

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

Vendor (https://github.com/danifus/pyzipper) PRIMARY 6.2 MEDIUM
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

Attack Vector
Local
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
None

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

EPSS Score
0.0%
Top 99% exploitable
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

31
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +31
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

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

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy