CVE-2026-114104
adm-zip before 0.6.1 Duplicate ZIP Entry Name Validation Bypass
adm-zip before 0.6.1 contains an inconsistent entry resolution vulnerability that allows attackers to bypass content validation by supplying ZIP archives with duplicate entry names. Attackers can craft archives where getEntry() returns the last duplicate while extractAllTo() writes the first, causing unvalidated bytes to be written to disk.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
8.2
adm-zip before 0.6.1 Duplicate ZIP Entry Name Validation Bypass
adm-zip before 0.6.1 contains an inconsistent entry resolution vulnerability that allows attackers to bypass content validation by supplying ZIP archives with duplicate entry names. Attackers can craft archives where getEntry() returns the last duplicate while extractAllTo() writes the first, causing unvalidated bytes to be written to disk.
- Record
CVE-2026-114104- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N - CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-436
- Updated
- 2026-11-02
EUVDEUVD-2026-106907
8.2
adm-zip before 0.6.1 contains an inconsistent entry resolution vulnerability that allows attackers to bypass content validation by supplying ZIP archives with duplicate entry names. Attackers can craft archives where getEntry() returns the last duplicate while extractAllTo() writes the first, causing unvalidated bytes to be written to disk.
- Record
EUVD-2026-106907- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-8238-w5pm-2374
7.5
adm-zip: Unhandled error event in async DEFLATE decompression crashes Node.js process (DoS)
Summary
Denial of Service in adm-zip's async decompression API allows an unauthenticated attacker to crash the entire Node.js host process by supplying a single malformed ZIP file.
Details
Affected package: adm-zip
Affected versions: at least 0.6.0 (current latest); likely all versions containing the current inflateAsync implementation in methods/inflater.js
Patched version: 0.6.1
Root Cause
methods/inflater.js:12-32 (inflateAsync) creates a zlib.createInflateRaw(option) stream and feeds it attacker-controlled compressed bytes via tmp.end(inbuf), but never registers an "error" listener on the stream:
inflateAsync: function (/*Function*/ callback) {
var tmp = zlib.createInflateRaw(option),
parts = [],
total = 0;
tmp.on("data", function (data) { parts.push(data); total += data.length; });
tmp.on("end", function () { /* build buf, callback(buf) */ });
tmp.end(inbuf); // no tmp.on("error", ...) registered anywhere
}
Per Node.js EventEmitter/stream semantics, an "error" event emitted with zero listeners is rethrown as an uncaught exception on a later tick, originating from the zlib C++ binding. This cannot be caught by a try/catch wrapped around the calling code, because the throw happens asynchronously, outside the synchronous call stack the try/catch covers.
This code path is reached from every public async API that decompresses entry data: readFileAsync, readAsTextAsync, extractAllToAsync, and ZipEntry.getDataAsync (zipEntry.js:51, :97-120, :309-315; adm-zip.js:157-164, :192-210, :893).
This library recently patched CVE-2026-39244 (GHSA-xcpc-8h2w-3j85), an unbounded Buffer.alloc() on the synchronous decompression path. That fix added a maxOutputLength option to zlib.inflateRawSync/zlib.createInflateRaw, and the sync path's resulting throw is naturally catchable. The async path shares the same maxOutputLength option (methods/inflater.js:5) but has no error-handling on the stream at all, so it was not covered by that fix and remains exploitable via either of two independent triggers:
- A DEFLATE entry with corrupted/malformed compressed bytes (
Z_DATA_ERROR) — no special crafting needed. - Compressed data whose inflated size exceeds the declared central-directory size, which now trips the
maxOutputLengthguard — but on the stream this surfaces via the unhandled"error"event rather than a catchable throw.
Attack Vector
- Attacker crafts (or corrupts) a ZIP file containing one DEFLATE-compressed entry with invalid/corrupted compressed bytes. Headers, CRC, and offsets can remain fully valid — only the compressed payload bytes need to be malformed.
- Victim application accepts this ZIP as an untrusted upload and processes it via any of adm-zip's async APIs, e.g.:
const zip = new AdmZip(uploadedBuffer); zip.readFileAsync(zip.getEntries()[0], (data) => { /* ... */ }); inflateAsyncbegins decompressing; zlib emits"error"onZ_DATA_ERROR.- No listener exists for that event, so Node rethrows it as an uncaught exception, crashing the entire host process — killing all in-flight requests for every other user/tenant on that process, not just the attacker's own request.
Impact
Any Node.js service that accepts untrusted ZIP uploads and processes them via adm-zip's async API (the documented, recommended pattern for non-blocking servers) can be crashed by a single unauthenticated request containing one small malicious file. This is a full process-level denial of service, not a per-request error.
Proof of Concept
Attached: poc_async_dos.py. Summary of what it does:
- Builds a fully valid ZIP using adm-zip's own writer (
new AdmZip(); zip.addFile(...); zip.toBuffer()), guaranteeing correct headers/CRC/offsets. - Locates the local file header's compressed-data region via its own (untouched) size/offset fields and XORs every byte in that…
- Record
GHSA-8238-w5pm-2374- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-248, CWE-400
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-mr8q-rv22-x3fr
8.2
adm-zip before 0.6.1 contains an inconsistent entry resolution vulnerability that allows...
adm-zip before 0.6.1 contains an inconsistent entry resolution vulnerability that allows attackers to bypass content validation by supplying ZIP archives with duplicate entry names. Attackers can craft archives where getEntry() returns the last duplicate while extractAllTo() writes the first, causing unvalidated bytes to be written to disk.
- Record
GHSA-mr8q-rv22-x3fr- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-436
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-p634-w6r4-rjp2
5.9
adm-zip: Duplicate ZIP entry names: getEntry() and extractAllTo() resolve to different content
Summary
A ZIP file can contain two entries with the identical name. adm-zip keeps both in its internal entry list, but its name-lookup table only retains the last one written. getEntry(name) and extractAllTo() walk these two different internal structures, so they can each resolve a duplicate name to a different entry. An application that validates a named entry's contents via getEntry() before trusting an archive, then extracts the whole archive, can end up approving one file's content while a different file's bytes are what actually land on disk under that name.
Details
zipFile.js:58-83retains both entries inentryListbut overwritesentryTable[name]with only the last one written.adm-zip.js:83-95,658-663usesentryTableforgetEntry()lookups — returns the last duplicate.adm-zip.js:769-914iteratesentryListfor extraction — writes the first duplicate (sync, default overwrite policy).
PoC
const AdmZip = require('adm-zip');
const z = new AdmZip({ noSort: true });
z.addFile('a.txt', Buffer.from('FIRST'));
z.addFile('b.txt', Buffer.from('SECOND'));
const raw = Buffer.from(z.toBuffer());
// rename the a.txt entry to b.txt directly in the raw bytes
for (let at = raw.indexOf('a.txt'); at >= 0; at = raw.indexOf('a.txt', at + 5)) {
raw.write('b.txt', at);
}
const parsed = new AdmZip(raw, { noSort: true });
const validated = parsed.getEntry('b.txt').getData().toString();
parsed.extractAllTo(outDir, false);
// validated === "SECOND", but the file written to disk === "FIRST"
Reproduced on the pinned commit (2b4d84087d45344643e0183756e19191d52815cc)
Impact
An application that checks a named entry's content before trusting an untrusted ZIP, then extracts it, can be made to approve different bytes than what actually gets written to disk — the classic check/use split that this kind of validate-then-extract pattern relies on.
- Record
GHSA-p634-w6r4-rjp2- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-436, CWE-696
- Updated
- 2026-11-02
NVD
8.2
adm-zip before 0.6.1 contains an inconsistent entry resolution vulnerability that allows attackers to bypass content validation by supplying ZIP archives with duplicate entry names. Attackers can craft archives where getEntry() returns the last duplicate while extractAllTo() writes the first, causing unvalidated bytes to be written to disk.
- Record
CVE-2026-114104- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-436
- Updated
- 2026-11-02
Show 15 moreShow less
OSV
8.2
adm-zip before 0.6.1 Duplicate ZIP Entry Name Validation Bypass
adm-zip before 0.6.1 contains an inconsistent entry resolution vulnerability that allows attackers to bypass content validation by supplying ZIP archives with duplicate entry names. Attackers can craft archives where getEntry() returns the last duplicate while extractAllTo() writes the first, causing unvalidated bytes to be written to disk.
- Record
CVE-2026-114104- CVSS 4.0
- 8.2 High
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-436
- Updated
- 2026-11-02
OSVGHSA-8238-w5pm-2374
7.5
adm-zip: Unhandled error event in async DEFLATE decompression crashes Node.js process (DoS)
Summary
Denial of Service in adm-zip's async decompression API allows an unauthenticated attacker to crash the entire Node.js host process by supplying a single malformed ZIP file.
Details
Affected package: adm-zip
Affected versions: at least 0.6.0 (current latest); likely all versions containing the current inflateAsync implementation in methods/inflater.js
Patched version: 0.6.1
Root Cause
methods/inflater.js:12-32 (inflateAsync) creates a zlib.createInflateRaw(option) stream and feeds it attacker-controlled compressed bytes via tmp.end(inbuf), but never registers an "error" listener on the stream:
inflateAsync: function (/*Function*/ callback) {
var tmp = zlib.createInflateRaw(option),
parts = [],
total = 0;
tmp.on("data", function (data) { parts.push(data); total += data.length; });
tmp.on("end", function () { /* build buf, callback(buf) */ });
tmp.end(inbuf); // no tmp.on("error", ...) registered anywhere
}
Per Node.js EventEmitter/stream semantics, an "error" event emitted with zero listeners is rethrown as an uncaught exception on a later tick, originating from the zlib C++ binding. This cannot be caught by a try/catch wrapped around the calling code, because the throw happens asynchronously, outside the synchronous call stack the try/catch covers.
This code path is reached from every public async API that decompresses entry data: readFileAsync, readAsTextAsync, extractAllToAsync, and ZipEntry.getDataAsync (zipEntry.js:51, :97-120, :309-315; adm-zip.js:157-164, :192-210, :893).
This library recently patched CVE-2026-39244 (GHSA-xcpc-8h2w-3j85), an unbounded Buffer.alloc() on the synchronous decompression path. That fix added a maxOutputLength option to zlib.inflateRawSync/zlib.createInflateRaw, and the sync path's resulting throw is naturally catchable. The async path shares the same maxOutputLength option (methods/inflater.js:5) but has no error-handling on the stream at all, so it was not covered by that fix and remains exploitable via either of two independent triggers:
- A DEFLATE entry with corrupted/malformed compressed bytes (
Z_DATA_ERROR) — no special crafting needed. - Compressed data whose inflated size exceeds the declared central-directory size, which now trips the
maxOutputLengthguard — but on the stream this surfaces via the unhandled"error"event rather than a catchable throw.
Attack Vector
- Attacker crafts (or corrupts) a ZIP file containing one DEFLATE-compressed entry with invalid/corrupted compressed bytes. Headers, CRC, and offsets can remain fully valid — only the compressed payload bytes need to be malformed.
- Victim application accepts this ZIP as an untrusted upload and processes it via any of adm-zip's async APIs, e.g.:
const zip = new AdmZip(uploadedBuffer); zip.readFileAsync(zip.getEntries()[0], (data) => { /* ... */ }); inflateAsyncbegins decompressing; zlib emits"error"onZ_DATA_ERROR.- No listener exists for that event, so Node rethrows it as an uncaught exception, crashing the entire host process — killing all in-flight requests for every other user/tenant on that process, not just the attacker's own request.
Impact
Any Node.js service that accepts untrusted ZIP uploads and processes them via adm-zip's async API (the documented, recommended pattern for non-blocking servers) can be crashed by a single unauthenticated request containing one small malicious file. This is a full process-level denial of service, not a per-request error.
Proof of Concept
Attached: poc_async_dos.py. Summary of what it does:
- Builds a fully valid ZIP using adm-zip's own writer (
new AdmZip(); zip.addFile(...); zip.toBuffer()), guaranteeing correct headers/CRC/offsets. - Locates the local file header's compressed-data region via its own (untouched) size/offset fields and XORs every byte in that…
- Record
GHSA-8238-w5pm-2374- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-248, CWE-400
- Updated
- 2026-11-02
OSVGHSA-p634-w6r4-rjp2
5.9
adm-zip: Duplicate ZIP entry names: getEntry() and extractAllTo() resolve to different content
Summary
A ZIP file can contain two entries with the identical name. adm-zip keeps both in its internal entry list, but its name-lookup table only retains the last one written. getEntry(name) and extractAllTo() walk these two different internal structures, so they can each resolve a duplicate name to a different entry. An application that validates a named entry's contents via getEntry() before trusting an archive, then extracts the whole archive, can end up approving one file's content while a different file's bytes are what actually land on disk under that name.
Details
zipFile.js:58-83retains both entries inentryListbut overwritesentryTable[name]with only the last one written.adm-zip.js:83-95,658-663usesentryTableforgetEntry()lookups — returns the last duplicate.adm-zip.js:769-914iteratesentryListfor extraction — writes the first duplicate (sync, default overwrite policy).
PoC
const AdmZip = require('adm-zip');
const z = new AdmZip({ noSort: true });
z.addFile('a.txt', Buffer.from('FIRST'));
z.addFile('b.txt', Buffer.from('SECOND'));
const raw = Buffer.from(z.toBuffer());
// rename the a.txt entry to b.txt directly in the raw bytes
for (let at = raw.indexOf('a.txt'); at >= 0; at = raw.indexOf('a.txt', at + 5)) {
raw.write('b.txt', at);
}
const parsed = new AdmZip(raw, { noSort: true });
const validated = parsed.getEntry('b.txt').getData().toString();
parsed.extractAllTo(outDir, false);
// validated === "SECOND", but the file written to disk === "FIRST"
Reproduced on the pinned commit (2b4d84087d45344643e0183756e19191d52815cc)
Impact
An application that checks a named entry's content before trusting an untrusted ZIP, then extracts it, can be made to approve different bytes than what actually gets written to disk — the classic check/use split that this kind of validate-then-extract pattern relies on.
- Record
GHSA-p634-w6r4-rjp2- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-436, CWE-696
- Updated
- 2026-11-02
OSVROOT-APP-NPM-GHSA-8238-w5pm-2374
7.5
GHSA-8238-w5pm-2374 in adm-zip - Patched by Root
Root has patched GHSA-8238-w5pm-2374 in the adm-zip package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-GHSA-8238-w5pm-2374- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-06
OSVCLSA-2026-1790854760 No score
TuxCare security update for adm-zip (1 CVE)
TuxCare rebuilt adm-zip to address 1 CVE. Fixed in 0.6.0-tuxcare.5.
- Record
CLSA-2026-1790854760- Updated
- 2026-11-02
OSVCLSA-2026-1790868332 No score
TuxCare security update for adm-zip (2 CVEs)
TuxCare rebuilt adm-zip to address 2 CVEs. Fixed in 0.5.18-tuxcare.6.
- Record
CLSA-2026-1790868332- Updated
- 2026-11-07
OSVCLSA-2026-1790869902 No score
TuxCare security update for adm-zip (2 CVEs)
TuxCare rebuilt adm-zip to address 2 CVEs. Fixed in 0.5.17-tuxcare.4.
- Record
CLSA-2026-1790869902- Updated
- 2026-11-07
OSVCLSA-2026-1791626885 No score
TuxCare security update for adm-zip (4 CVEs)
TuxCare rebuilt adm-zip to address 4 CVEs. Fixed in 0.4.16-tuxcare.2.
- Record
CLSA-2026-1791626885- Updated
- 2026-11-07
OSVCLSA-2026-1791627044 No score
TuxCare security update for adm-zip (2 CVEs)
TuxCare rebuilt adm-zip to address 2 CVEs. Fixed in 0.4.4-tuxcare.3.
- Record
CLSA-2026-1791627044- Updated
- 2026-11-07
OSVCLSA-2026-1791627198 No score
TuxCare security update for adm-zip (2 CVEs)
TuxCare rebuilt adm-zip to address 2 CVEs. Fixed in 0.4.7-tuxcare.3.
- Record
CLSA-2026-1791627198- Updated
- 2026-11-02
OSVCLSA-2026-1791666093 No score
TuxCare security update for adm-zip (2 CVEs)
TuxCare rebuilt adm-zip to address 2 CVEs. Fixed in 0.4.4-tuxcare.4.
- Record
CLSA-2026-1791666093- Updated
- 2026-11-07
OSVCLSA-2026-1791666194 No score
TuxCare security update for adm-zip (2 CVEs)
TuxCare rebuilt adm-zip to address 2 CVEs. Fixed in 0.5.12-tuxcare.3.
- Record
CLSA-2026-1791666194- Updated
- 2026-11-02
OSVCLSA-2026-1791666292 No score
TuxCare security update for adm-zip (1 CVE)
TuxCare rebuilt adm-zip to address 1 CVE. Fixed in 0.5.10-tuxcare.4.
- Record
CLSA-2026-1791666292- Updated
- 2026-11-02
OSVCLSA-2026-1791981819 No score
TuxCare security update for adm-zip (4 CVEs)
TuxCare rebuilt adm-zip to address 4 CVEs. Fixed in 0.5.10-tuxcare.5.
- Record
CLSA-2026-1791981819- Updated
- 2026-11-02
OSVCLSA-2026-1793281815 No score
TuxCare security update for adm-zip (2 CVEs)
TuxCare rebuilt adm-zip to address 2 CVEs. Fixed in 0.5.18-tuxcare.8.
- Record
CLSA-2026-1793281815- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
adm-zipnpm |
through 0.6.0 | 0.6.1 |
adm-zipTuxCare:npm |
0.6.0-tuxcare.0 up to 0.6.0-tuxcare.5, plus listed versions 0.6.00.6.0-tuxcare.10.6.0-tuxcare.20.6.0-tuxcare.30.6.0-tuxcare.4 |
0.6.0-tuxcare.5 |
adm-zipTuxCare:npm |
0.5.18-tuxcare.0 up to 0.5.18-tuxcare.6, plus listed versions 0.5.180.5.18-tuxcare.10.5.18-tuxcare.20.5.18-tuxcare.30.5.18-tuxcare.40.5.18-tuxcare.5 |
0.5.18-tuxcare.6 |
adm-zipTuxCare:npm |
0.5.17-tuxcare.0 up to 0.5.17-tuxcare.4, plus listed versions 0.5.170.5.17-tuxcare.10.5.17-tuxcare.20.5.17-tuxcare.3 |
0.5.17-tuxcare.4 |
adm-zipTuxCare:npm From an advisory covering 2 CVEs |
0.4.16-tuxcare.0 up to 0.4.16-tuxcare.2, plus listed versions 0.4.160.4.16-tuxcare.1 |
0.4.16-tuxcare.2 |
adm-zipTuxCare:npm |
0.4.4-tuxcare.0 up to 0.4.4-tuxcare.3, plus listed versions 0.4.40.4.4-tuxcare.10.4.4-tuxcare.2 |
0.4.4-tuxcare.3 |
adm-zipTuxCare:npm |
0.4.7-tuxcare.0 up to 0.4.7-tuxcare.3, plus listed versions 0.4.70.4.7-tuxcare.10.4.7-tuxcare.2 |
0.4.7-tuxcare.3 |
adm-zipTuxCare:npm |
0.4.4-tuxcare.0 up to 0.4.4-tuxcare.4, plus listed versions 0.4.40.4.4-tuxcare.10.4.4-tuxcare.20.4.4-tuxcare.3 |
0.4.4-tuxcare.4 |
adm-zipTuxCare:npm |
0.5.12-tuxcare.0 up to 0.5.12-tuxcare.3, plus listed versions 0.5.120.5.12-tuxcare.10.5.12-tuxcare.2 |
0.5.12-tuxcare.3 |
adm-zipTuxCare:npm |
0.5.10-tuxcare.0 up to 0.5.10-tuxcare.4, plus listed versions 0.5.100.5.10-tuxcare.10.5.10-tuxcare.20.5.10-tuxcare.3 |
0.5.10-tuxcare.4 |
Show 5 moreShow less
| Package | Affected | Fixed |
|---|---|---|
adm-zipTuxCare:npm From an advisory covering 2 CVEs |
0.5.10-tuxcare.0 up to 0.5.10-tuxcare.5, plus listed versions 0.5.100.5.10-tuxcare.10.5.10-tuxcare.20.5.10-tuxcare.30.5.10-tuxcare.4 |
0.5.10-tuxcare.5 |
adm-zipTuxCare:npm |
0.5.18-tuxcare.0 up to 0.5.18-tuxcare.8, plus listed versions 0.5.180.5.18-tuxcare.10.5.18-tuxcare.20.5.18-tuxcare.30.5.18-tuxcare.40.5.18-tuxcare.50.5.18-tuxcare.60.5.18-tuxcare.7 |
0.5.18-tuxcare.8 |
adm-zipnpm |
before 0.6.1 | 0.6.1 |
adm-zipRoot:npm |
before 0.6.0-aikido.3 | 0.6.0-aikido.30.5.10-aikido.50.5.9-aikido.20.5.18-aikido.30.5.9-aikido.3 |
@rootio/adm-zipRoot:npm |
before 0.6.0-root.io.3 | 0.6.0-root.io.30.5.10-root.io.50.5.9-root.io.20.5.18-root.io.30.5.9-root.io.3 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases, cwes, facts, published, references | OSV | |
| facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-114104 is a high vulnerability (CVSS 8.2) in Cthackers Adm-zip, published September 29, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.33%, the 26th percentile. Fixed in adm-zip 0.6.1.
References
github.com/cthackers/adm-zip/security/advisories/GHSA-p634-w6r4-rjp2
vulncheck.com/advisories/adm-zip-before-0.6.1-duplicate-zip-entry-name-validation-bypass
github.com/cthackers/adm-zip/security/advisories/GHSA-8238-w5pm-2374
github.com/cthackers/adm-zip/commit/5e70d3a26097d68fa981c41f022c053117174e49
github.com/cthackers/adm-zip/releases/tag/v0.6.1
github.com/advisories/GHSA-8238-w5pm-2374
Show 6 moreShow less
nvd.nist.gov/vuln/detail/CVE-2026-114104
github.com/advisories/GHSA-mr8q-rv22-x3fr
github.com/cthackers/adm-zip/commit/05101d47b3b983b705cc3e66fc34366118ba7b99
github.com/advisories/GHSA-p634-w6r4-rjp2
github.com/CVEProject/cvelistV5/tree/main/cves/2026/114xxx/CVE-2026-114104.json
github.com/cthackers/adm-zip
Left out here: the rest of 2 source descriptions. The JSON record has them.