ShipProof v0.8.0 — Cross-File Taint, Framework Confidence, Parallel Scans, and Fair Benchmarks
ShipProof v0.8.0 turns the analysis depth, throughput, and evaluation story of the production gate up a level while keeping every workflow offline, deterministic, and dependency-free. The executable scanner now contains 575 rules; the research catalogs remain explicitly non-executable until their precision fixtures pass.
Highlights
- Opt-in cross-file taint analysis:
shipproof scan . --cross-file(also on the MCPshipproof_scantool) promotes unsanitized interprocedural flows — route entrypoints through helpers into SQL, command-execution, and eval sinks — intoL2findings on the sink line with call-chain evidence, reusing the offline impact-graph analyzer. Flow totals and unsanitized counts are reported in JSON. - Four evidence-gated framework rules:
SP662Django wildcard CORS,SP663Django non-secure session cookies,SP664FastAPI routes without visible rate limiting, andSP665DjangoDEBUGin deployable settings. Each ships with positive/negative/adversarial fixtures, two-source primary grounding, false-positive analysis, and both README tables; the hardened demo fixture demonstrates SP664 remediation with a real token-bucket limiter. - Framework-aware confidence: structural framework rules keep their default confidence only when repository manifests declare the framework; present-but-undeclared frameworks downgrade confidence one level instead of suppressing, and manifest-less repositories keep full confidence.
- Deterministic parallel scanning:
--jobs Nscans files across worker processes with byte-identical output, enforced by a jobs=1 versus jobs=4 parity test, and falls back to sequential execution when process pools are unavailable. - Fair, offline head-to-head benchmarking:
benchmarks/head_to_head.pymeasures any scanner against ShipProof on identical local corpora — median end-to-end wall time plus file-level precision/recall/F1 against a shared label file. Third-party tools run only with caller-supplied rule files; ShipProof bundles, downloads, and copies no third-party rules. - Faster, more precise engine: quadratic
SP577/SP579windows are bounded to their reporting span and a sound literal-gate prefilter (validated over 370 million rule/line checks with zero false skips) skips rules whose required literals are absent, cutting full-repository scans by roughly 48%; same-line collisions now keep the strongest proof level, docstring examples stop triggering non-secret rules, placeholder filtering targets the credential value (un-breakingSP004), entropy calibration coversSP004/SP019–SP021, and the AST engine detects concatenated and base64-encoded credentials. - Exit-code contract, end to end: scanner crashes (including
RecursionErrorand raw Windows NTSTATUS statuses) exit2as invalid evidence instead of masquerading as gate blocks; gate timeouts and buffer overflows report actionable errors withSHIPPROOF_GATE_TIMEOUT_MS/SHIPPROOF_MAX_BUFFER_BYTESoverrides. - Suppression integrity:
shipproof-ignoremarkers are honored only inside comments (never string literals), accept multiple rule IDs at once, and bind the Python AST engine as well as the regex engine. Every credential rule that redacts evidence now receives placeholder filtering, comment scanning, and document scanning. - Precise locations: findings carry
column,end_line, andend_column; SARIF regions and GitHub annotations use them, with sanitized annotation messages. - Quieter Node layer: one cached Python runtime probe per process across CLI, Action, and MCP; configurable MCP timeout (
SHIPPROOF_MCP_TIMEOUT_MS) and optional result cache (SHIPPROOF_MCP_CACHE_MS);shipproof_scanacceptsexclude,min_confidence, andcross_file; snippets are byte-limited to match the Python scanner; zod schemas are zod-4 compatible; policy limits are unified with the Action and MCP; evidence reports classify diagnostics intoseverity_counts; Action step summaries escape table cells and cap rendered rows; and the README documents SARIF upload for Code Scanning.
Compatibility
- Node.js 20 or newer for the CLI and adapters.
- Python 3.10 or newer for scanning and Python-backed gates.
- Policy version
1and evidence schema version1.0remain compatible; scan reports add optionalcolumn,end_line,end_column, andcross_file_flows_unsanitizedfields (additive, schema-versioned). --jobs 1(default) and opt-out of--cross-filepreserve prior behavior exactly.- Exit codes remain
0for pass,1for a measured gate failure, and2for invalid or unavailable evidence.
Verification
The release commit must pass npm run check, packed-artifact smoke testing, and a direct repository self-scan at the high threshold before the exact v0.8.0 tag is created.