{"id":"CVE-2026-101894","aliases":["CLSA-2026-1792231664","EUVD-2026-88365","GHSA-hrh2-vp3x-79xf","ROOT-APP-NPM-CVE-2026-101894"],"status":"published","title":"@xhmikosr/decompress: Path traversal via symlink chain","description":"The decompress package for Node.js extracts archives. Prior to 10.2.2 and 11.1.4, the default decompress(input, output) API relies on lexical containment checks that do not account for the kernel following a planted symlink chain. An attacker can supply a crafted archive containing chained symlink entries so that a later entry resolves outside the output directory. This allows files outside output to be read or written, and overwriting startup scripts or configuration can lead to remote code execution. The maintained @xhmikosr/decompress package is fixed in 10.2.2 and 11.1.4, but the separately affected unmaintained decompress package remains unpatched through 4.2.1. This vulnerability results from a bypass of the incomplete hardening for CVE-2026-53486. @xhmikosr/decompress is fixed in versions 10.2.2 and 11.1.4.","severity":{"version":"3.1","score":9.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"critical","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00814,"percentile":0.57286,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":true,"fix_available":true},"cwes":["CWE-22","CWE-59"],"published":"2026-09-28T16:57:11Z","modified":"2026-11-04T02:47:02Z","exploits":[{"source":"pocgithub","id":"murrez/CVE-2026-101894","title":"murrez/CVE-2026-101894","date":"2026-09-29","url":"https://github.com/murrez/CVE-2026-101894"}],"fixes":[{"ecosystem":"npm","package":"@xhmikosr/decompress","fixed_in":["11.1.4","10.2.2"],"sources":["ghsa","osv"]},{"ecosystem":"Root:npm","package":"decompress","fixed_in":["4.2.1-aikido.2"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@xhmikosr/decompress","fixed_in":["9.0.1-aikido.3","11.1.3-aikido.1"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@rootio/decompress","fixed_in":["4.2.1-root.io.2"],"sources":["osv"]},{"ecosystem":"Root:npm","package":"@rootio/xhmikosr__decompress","fixed_in":["9.0.1-root.io.3","11.1.3-root.io.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"@xhmikosr/decompress","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"11.0.0"},{"last_affected":"11.1.3"},{"fixed":"11.1.4"}]}]},{"source":"ghsa","ecosystem":"npm","package":"@xhmikosr/decompress","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"10.2.1"},{"fixed":"10.2.2"}]}]},{"source":"ghsa","ecosystem":"npm","package":"decompress","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"4.2.1"}]}]},{"source":"osv","ecosystem":"TuxCare:npm","package":"decompress","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.2.1-tuxcare.0"},{"fixed":"4.2.1-tuxcare.2"}]}],"versions":["4.2.1","4.2.1-tuxcare.1"],"bundled":2},{"source":"osv","ecosystem":"npm","package":"@xhmikosr/decompress","ranges":[{"type":"SEMVER","events":[{"introduced":"11.0.0"},{"fixed":"11.1.4"}]}]},{"source":"osv","ecosystem":"npm","package":"@xhmikosr/decompress","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"10.2.2"}]}]},{"source":"osv","ecosystem":"npm","package":"decompress","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"last_affected":"4.2.1"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"decompress","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.2.1-aikido.2"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@xhmikosr/decompress","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"9.0.1-aikido.3"},{"fixed":"11.1.3-aikido.1"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@rootio/decompress","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.2.1-root.io.2"}]}]},{"source":"osv","ecosystem":"Root:npm","package":"@rootio/xhmikosr__decompress","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"9.0.1-root.io.3"},{"fixed":"11.1.3-root.io.1"}]}]}],"products":[{"vendor":"kevva","product":"decompress"},{"vendor":"xhmikosr","product":"decompress"}],"references":[{"url":"https://github.com/XhmikosR/decompress/security/advisories/GHSA-hrh2-vp3x-79xf","tags":["x_refsource_CONFIRM","advisory","web"]},{"url":"https://github.com/XhmikosR/decompress/commit/5f4b2f64abb31bbaf1fef8975b595fd7df2558d8","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/XhmikosR/decompress/commit/f6c88c668216d6a12c6cecf4fe0b6c70bf77050a","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/XhmikosR/decompress/releases/tag/v10.2.2","tags":["x_refsource_MISC","web"]},{"url":"https://github.com/XhmikosR/decompress/releases/tag/v11.1.4","tags":["x_refsource_MISC","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-101894","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-hrh2-vp3x-79xf"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/101xxx/CVE-2026-101894.json","tags":["advisory"]},{"url":"https://github.com/XhmikosR/decompress","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-101894","title":"@xhmikosr/decompress: Path traversal via symlink chain","description":"The decompress package for Node.js extracts archives. Prior to 10.2.2 and 11.1.4, the default decompress(input, output) API relies on lexical containment checks that do not account for the kernel following a planted symlink chain. An attacker can supply a crafted archive containing chained symlink entries so that a later entry resolves outside the output directory. This allows files outside output to be read or written, and overwriting startup scripts or configuration can lead to remote code execution. The maintained @xhmikosr/decompress package is fixed in 10.2.2 and 11.1.4, but the separately affected unmaintained decompress package remains unpatched through 4.2.1. This vulnerability results from a bypass of the incomplete hardening for CVE-2026-53486. @xhmikosr/decompress is fixed in versions 10.2.2 and 11.1.4.","status":"published","published":"2026-09-28T16:57:11.44Z","modified":"2026-09-28T17:39:11.304Z","cvss":[{"version":"3.1","score":9.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"critical","assessor":"cna"}],"cwes":["CWE-22","CWE-59"],"updated_at":"2026-11-02T14:20:09.808851Z"}],"euvd":[{"id":"EUVD-2026-88365","description":"The decompress package for Node.js extracts archives. Prior to 10.2.2 and 11.1.4, the default decompress(input, output) API relies on lexical containment checks that do not account for the kernel following a planted symlink chain. An attacker can supply a crafted archive containing chained symlink entries so that a later entry resolves outside the output directory. This allows files outside output to be read or written, and overwriting startup scripts or configuration can lead to remote code execution. The maintained @xhmikosr/decompress package is fixed in 10.2.2 and 11.1.4, but the separately affected unmaintained decompress package remains unpatched through 4.2.1. This vulnerability results from a bypass of the incomplete hardening for CVE-2026-53486. @xhmikosr/decompress is fixed in versions 10.2.2 and 11.1.4.","status":"published","published":"2026-09-28T16:57:11Z","modified":"2026-09-28T17:39:11Z","cvss":[{"version":"3.1","score":9.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"critical"}],"updated_at":"2026-11-02T17:27:53.091489Z"}],"ghsa":[{"id":"GHSA-hrh2-vp3x-79xf","title":"@xhmikosr/decompress: Path traversal via symlink chain","description":"### Impact\n\nWhen extracting an untrusted archive with the default `decompress(input, output)` API, a crafted archive containing a chain of symlink entries can make a later entry resolve **outside** the output directory. The lexical containment checks pass, but the kernel follows the planted symlinks to a path outside `output`, letting an attacker write (and read) files outside the intended extraction directory. Overwriting startup scripts or configuration can lead to remote code execution.\n\nThis is a bypass of the hardening in GHSA-mp2f-45pm-3cg9. Any application that extracts attacker-controlled archives is affected.\n\n### Patches\n\nFixed in **11.1.4** (`latest`) and backported to **10.2.2** (`release-v10` dist-tag). Upgrade to one of these.\n\nThe unmaintained upstream `decompress` package shares this flaw and will not be patched. Migrate to `@xhmikosr/decompress@11.1.4` (or `@10.2.2`).\n\n### Workarounds\n\nNone. Do not extract untrusted archives on affected versions. If you cannot upgrade, validate entries out of band and reject any whose resolved path escapes the target directory.","status":"published","published":"2026-09-29T23:49:42Z","modified":"2026-09-29T23:49:43Z","cvss":[{"version":"3.1","score":9.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"critical"}],"cwes":["CWE-22","CWE-59"],"updated_at":"2026-11-02T14:41:23.783773Z"}],"nvd":[{"id":"CVE-2026-101894","description":"The decompress package for Node.js extracts archives. Prior to 10.2.2 and 11.1.4, the default decompress(input, output) API relies on lexical containment checks that do not account for the kernel following a planted symlink chain. An attacker can supply a crafted archive containing chained symlink entries so that a later entry resolves outside the output directory. This allows files outside output to be read or written, and overwriting startup scripts or configuration can lead to remote code execution. The maintained @xhmikosr/decompress package is fixed in 10.2.2 and 11.1.4, but the separately affected unmaintained decompress package remains unpatched through 4.2.1. This vulnerability results from a bypass of the incomplete hardening for CVE-2026-53486. @xhmikosr/decompress is fixed in versions 10.2.2 and 11.1.4.","status":"published","published":"2026-09-28T17:17:48.83Z","modified":"2026-09-30T19:38:27.293Z","cvss":[{"version":"3.1","score":9.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"critical","assessor":"secondary"}],"cwes":["CWE-22","CWE-59"],"updated_at":"2026-11-02T14:12:52.081323Z"}],"osv":[{"id":"CVE-2026-101894","title":"@xhmikosr/decompress: Path traversal via symlink chain","description":"The decompress package for Node.js extracts archives. Prior to 10.2.2 and 11.1.4, the default decompress(input, output) API relies on lexical containment checks that do not account for the kernel following a planted symlink chain. An attacker can supply a crafted archive containing chained symlink entries so that a later entry resolves outside the output directory. This allows files outside output to be read or written, and overwriting startup scripts or configuration can lead to remote code execution. The maintained @xhmikosr/decompress package is fixed in 10.2.2 and 11.1.4, but the separately affected unmaintained decompress package remains unpatched through 4.2.1. This vulnerability results from a bypass of the incomplete hardening for CVE-2026-53486. @xhmikosr/decompress is fixed in versions 10.2.2 and 11.1.4.","status":"published","published":"2026-09-28T16:57:11.44Z","modified":"2026-11-04T02:47:02.456980023Z","cvss":[{"version":"3.1","score":9.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"critical"}],"cwes":["CWE-22","CWE-59"],"updated_at":"2026-11-04T02:53:57.551196Z"},{"id":"GHSA-hrh2-vp3x-79xf","title":"@xhmikosr/decompress: Path traversal via symlink chain","description":"### Impact\n\nWhen extracting an untrusted archive with the default `decompress(input, output)` API, a crafted archive containing a chain of symlink entries can make a later entry resolve **outside** the output directory. The lexical containment checks pass, but the kernel follows the planted symlinks to a path outside `output`, letting an attacker write (and read) files outside the intended extraction directory. Overwriting startup scripts or configuration can lead to remote code execution.\n\nThis is a bypass of the hardening in GHSA-mp2f-45pm-3cg9. Any application that extracts attacker-controlled archives is affected.\n\n### Patches\n\nFixed in **11.1.4** (`latest`) and backported to **10.2.2** (`release-v10` dist-tag). Upgrade to one of these.\n\nThe unmaintained upstream `decompress` package shares this flaw and will not be patched. Migrate to `@xhmikosr/decompress@11.1.4` (or `@10.2.2`).\n\n### Workarounds\n\nNone. Do not extract untrusted archives on affected versions. If you cannot upgrade, validate entries out of band and reject any whose resolved path escapes the target directory.","status":"published","published":"2026-09-29T23:49:42Z","modified":"2026-09-30T00:00:03.842182309Z","cvss":[{"version":"3.1","score":9.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N","level":"critical"}],"cwes":["CWE-22","CWE-59"],"updated_at":"2026-11-02T15:46:49.621585Z"},{"id":"CLSA-2026-1792231664","title":"TuxCare security update for decompress (2 CVEs)","description":"TuxCare rebuilt decompress to address 2 CVEs. Fixed in 4.2.1-tuxcare.2.","status":"published","published":"2026-10-17T10:07:44Z","modified":"2026-10-17T13:09:28.764801374Z","updated_at":"2026-11-02T15:43:52.011757Z"},{"id":"ROOT-APP-NPM-CVE-2026-101894","title":"CVE-2026-101894 in decompress - Patched by Root","description":"Root has patched CVE-2026-101894 in the decompress package for Root:npm. Multiple fixed versions available.","status":"published","published":"2026-10-12T10:05:08Z","modified":"2026-10-12T11:15:03.343411277Z","updated_at":"2026-11-02T15:53:27.362922Z"}]}}
