Search

Find a vulnerability

Search criteria Use this form to refine search results.
Full-text search supports keyword queries with ranking and filtering.
You can combine vendor, product, and sources to narrow results.
Enable “Apply ordering” to sort by date instead of relevance.

    Related vulnerabilities

    GHSA-CRQM-M339-7M2P

    Vulnerability from github – Published: 2026-05-14 16:17 – Updated: 2026-05-14 16:17
    VLAI
    Summary
    pyzipper has an encryption bypass for small files encrypted using it
    Details

    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

    Show details on source website

    {
      "affected": [
        {
          "package": {
            "ecosystem": "PyPI",
            "name": "pyzipper"
          },
          "ranges": [
            {
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "0.4.0"
                }
              ],
              "type": "ECOSYSTEM"
            }
          ]
        }
      ],
      "aliases": [
        "CVE-2026-44722"
      ],
      "database_specific": {
        "cwe_ids": [
          "CWE-480"
        ],
        "github_reviewed": true,
        "github_reviewed_at": "2026-05-14T16:17:01Z",
        "nvd_published_at": null,
        "severity": "MODERATE"
      },
      "details": "### Impact\nA 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.\n\nThe 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.\n\n### Patches\nUpgrade 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.\n\nIf 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.\n\n## Credit\nThanks to Lucas Lavarello from Kulkan Security for identifying this issue.\n\n### References\nhttps://www.winzip.com/en/support/aes-encryption/#CRC\nhttps://www.winzip.com/en/support/aes-encryption/#crc-faq",
      "id": "GHSA-crqm-m339-7m2p",
      "modified": "2026-05-14T16:17:01Z",
      "published": "2026-05-14T16:17:01Z",
      "references": [
        {
          "type": "WEB",
          "url": "https://github.com/danifus/pyzipper/security/advisories/GHSA-crqm-m339-7m2p"
        },
        {
          "type": "PACKAGE",
          "url": "https://github.com/danifus/pyzipper"
        },
        {
          "type": "WEB",
          "url": "https://github.com/danifus/pyzipper/releases/tag/v0.4.0"
        }
      ],
      "schema_version": "1.4.0",
      "severity": [
        {
          "score": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
          "type": "CVSS_V3"
        }
      ],
      "summary": "pyzipper has an encryption bypass for small files encrypted using it"
    }

    PYSEC-2026-3044

    Vulnerability from pysec - Published: 2026-07-13 15:19 - Updated: 2026-07-13 16:06
    VLAI
    Details

    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

    Impacted products
    Name purl
    pyzipper pkg:pypi/pyzipper

    {
      "affected": [
        {
          "package": {
            "ecosystem": "PyPI",
            "name": "pyzipper",
            "purl": "pkg:pypi/pyzipper"
          },
          "ranges": [
            {
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "0.4.0"
                }
              ],
              "type": "ECOSYSTEM"
            }
          ],
          "versions": [
            "0.1.0",
            "0.2.0",
            "0.3.0",
            "0.3.1",
            "0.3.2",
            "0.3.3",
            "0.3.4",
            "0.3.5",
            "0.3.6"
          ]
        }
      ],
      "aliases": [
        "CVE-2026-44722",
        "GHSA-crqm-m339-7m2p"
      ],
      "details": "### Impact\nA 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.\n\nThe 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.\n\n### Patches\nUpgrade 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.\n\nIf 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.\n\n## Credit\nThanks to Lucas Lavarello from Kulkan Security for identifying this issue.\n\n### References\nhttps://www.winzip.com/en/support/aes-encryption/#CRC\nhttps://www.winzip.com/en/support/aes-encryption/#crc-faq",
      "id": "PYSEC-2026-3044",
      "modified": "2026-07-13T16:06:06.348133Z",
      "published": "2026-07-13T15:19:05.343307Z",
      "references": [
        {
          "type": "WEB",
          "url": "https://github.com/danifus/pyzipper/security/advisories/GHSA-crqm-m339-7m2p"
        },
        {
          "type": "PACKAGE",
          "url": "https://github.com/danifus/pyzipper"
        },
        {
          "type": "WEB",
          "url": "https://github.com/danifus/pyzipper/releases/tag/v0.4.0"
        },
        {
          "type": "PACKAGE",
          "url": "https://pypi.org/project/pyzipper"
        },
        {
          "type": "ADVISORY",
          "url": "https://github.com/advisories/GHSA-crqm-m339-7m2p"
        },
        {
          "type": "ADVISORY",
          "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-44722"
        }
      ],
      "severity": [
        {
          "score": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
          "type": "CVSS_V3"
        }
      ],
      "summary": "pyzipper has an encryption bypass for small files encrypted using it"
    }