Empirical study reveals severe blind spots in standard static taint analyzers across open-source libraries, highlighting the need to re-source taint models to untrusted metadata.
Applications routinely treat the names, paths, and extensions inside archive manifests and download metadata as values they chose themselves. They did not. A tar entry pathname, a download's Content-Disposition filename, a subtitle URI's extension: every one is an attacker-controlled string, and every one is later consumed verbatim as a filesystem decision. I systematize this class over eleven real CVEs across eight open-source projects and the CPython standard library, in Python and JavaScript, and sort them into three failure modes: (A) an inconsistently applied guard, omitted at a semantically equivalent sink; (B) a missing resource invariant, no budget on count, size, depth, or iteration; and (C) an absent guard, the canonical Zip-Slip shape. Standard taint static analysis has a systematic blind spot on this class: its dedicated queries model the archive or download library as a trusted taint source and flag only downstream consumers, so they under-detect the bug precisely when it lives inside the library itself. On my corpus, CodeQL's default tarslip/zipslip queries catch 0 of 11 and Semgrep's public registry catches 1 of 11. My remedy is a three-technique detection pack: taint re-sourced to the metadata field where the library parses it, plus structural guard-absence and budget-absence rules for the cases taint cannot discriminate. As a five-rule Semgrep pack the detector catches 8 of 11 CVEs at the real vulnerable sink with clean regression discrimination, at controlled-corpus precision 0.27, or 7 of 11 at 0.50 once one deliberately noisy rule is dropped, against 0.03 for the registry baseline on the same 45-package set. Three residual misses remain and both baselines share them, so the re-sourced detector is never worse. A replication artifact (the Semgrep rule pack, the labeled 11-CVE corpus with commit SHAs, the negative-corpus list, the predetermined catch criterion, the ext4 inode-exhaustion reproduction, and the raw detector logs) accompanies the paper.
No takes yet. Share an insight, caveat, or question.
Pavan Nallamothu (2026) studied this question.
Synapse has enriched 5 closely related papers on similar clinical questions. Consider them for comparative context: