---
id: "CVE-2026-106070"
kind: "vulnerability"
aliases: ["CVE-2026-106070"]
title: "Node.js: zlib ZipFile can return bytes from the wrong archive entry"
severity: "low"
cvss: 3.7
epss: 0.00324
exploited: false
status: "open"
category: "runtime"
products: []
ecosystems: []
tags: ["node.js", "poc-public", "runtime", "security-scanners", "zip-parsing"]
not_affected_if: ["no-untrusted-zip-input", "not-node-26"]
published_at: "2026-10-23T17:17:19+00:00"
first_seen_at: "2026-10-23T21:57:34+00:00"
updated_at: "2026-10-25T12:38:50+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-106070", "first_seen_at": "2026-10-23T21:57:34+00:00"}, {"source": "github-poc", "url": "https://github.com/CompleteTech-LLC/node-cve-2026-106070-check", "first_seen_at": "2026-10-23T23:55:02+00:00"}, {"source": "epss", "url": "https://api.first.org/data/v1/epss?cve=CVE-2026-106070", "first_seen_at": "2026-10-25T12:38:50+00:00"}]
---

# Node.js: zlib ZipFile can return bytes from the wrong archive entry

A flaw in Node.js zlib.ZipFile lets a crafted archive with mismatched local and central headers return attacker-chosen bytes from the start of the file instead of rejecting it. Because the CRC check passes too, a Node.js-based scanner can approve content that differs from what another ZIP tool extracts.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Run `node --version` and check whether it reports a 26.x release.
- Search your code for uses of `zlib.ZipFile` or reads of `zipEntry.modified` on untrusted archives.

## Timeline

- 2026-10-23T21:57:34+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-106070
- 2026-10-23T23:55:02+00:00 github-poc https://github.com/CompleteTech-LLC/node-cve-2026-106070-check
- 2026-10-25T12:38:50+00:00 epss https://api.first.org/data/v1/epss?cve=CVE-2026-106070

## Documents

- [poc] CompleteTech-LLC/node-cve-2026-106070-check https://github.com/CompleteTech-LLC/node-cve-2026-106070-check

## From the sources

A flaw in the Node.js `zlib.ZipFile` API can cause it to return bytes that do not belong to the requested entry after the local and central header validation fails.

When `zipEntry.modified` is read on an archive whose local header does not match its central directory, either directly or while compacting the archive, the validation error is caught but the parsed local header is left cached without a content offset. A later content read then returns attacker-controlled bytes from the start of the file instead of rejecting the archive, and CRC-32 verification still passes because the attacker controls the central directory CRC. A Node.js-based scanner can therefore approve different content from what another ZIP implementation extracts from the same archive.

This vulnerability affects Node.js **26.x**.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
