CVE-2026-23950 affects node-tar (npm package tar) in versions up to and including 7.5.3. The vulnerability is caused by incomplete handling of Unicode path collisions in the path-reservations mechanism, which is intended to serialize metadata checks and file operations for the same path during archive extraction. On case-insensitive or normalization-insensitive filesystems such as macOS APFS/HFS+, distinct archive entry names that collide at the filesystem layer (for example, ß and ss) are not treated as equivalent by the library's reservation logic. As a result, colliding paths can be processed in parallel, bypassing internal concurrency safeguards. An attacker can place such conflicting filenames in a malicious tar archive and exploit the resulting race condition to perform symlink poisoning, ultimately leading to arbitrary file overwrite during extraction.
Mallory correlates every CVE against your assets, your vendors, and active adversary campaigns. Know which vulnerabilities matter for you, not just which ones are loud.
What it means. What to do now. Patch path, mitigations, and the assume-compromise checklist.
What an attacker gets, and what they’ve been doing with it.
If you can’t patch tonight, do this now.
SymbolicLink entries, as noted in the provided content, to reduce exposure to symlink-poisoning-based arbitrary writes. More generally, restrict extraction destinations and run extraction with the least privileges possible.Patch, then assume compromise.
tar) to version 7.5.4 or later. The fix updates path-reservations.js so path normalization better matches target filesystem behavior, using a normalization/case-folding approach described as applying a form such as NFKD, followed by toLocaleLowerCase('en') and then toLocaleUpperCase('en'), to ensure colliding paths are properly locked and serialized.1 valid exploit after Mallory filtered fakes, detection scripts, and README-only repos.
Repository is a Node.js proof-of-concept for CVE-2026-23950 affecting the npm `tar` package (pinned to 7.5.3). The core exploit logic is in `index.js`, which constructs an in-memory tar archive using `tar.Header` and a `PassThrough` stream, containing two filenames designed to collide under Unicode normalization/case-insensitive comparisons: `collision_ss` and `collision_ß`. It then extracts the stream with `tar.Unpack({ cwd: 'race_exploit_dir', jobs: 8 })` to encourage parallel extraction and a race window. After extraction, it enumerates files in the target directory, prints inode numbers and content prefixes, and flags success if only one file exists or if two filenames map to the same inode (indicating a collision/overwrite). Supporting files include `package.json`/`package-lock.json` (dependency pinning) and a sample artifact under `race_exploit_dir/`. No network exploitation is performed; impact is local file corruption/overwrite during archive extraction.
Products and vendors Mallory has correlated with this vulnerability. Open in Mallory to drill down to specific CPE configurations and version ranges.
Vendor-confirmed product mapping. Mallory continuously reconciles this list against your asset inventory.
13 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.
Query your assets running an affected version, and investigate the blast radius.
Every observed campaign linking this CVE to a named adversary.
Malware families riding this exploit, with evidence and IOCs.
YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.
Cross-references every affected SKU, including bundled OEM variants.
Community discussion across Reddit, Mastodon, and other social sources.