Skip to content

Choose a tag to compare

@github-actions github-actions released this 22 Aug 05:39
· 46 commits to main since this release

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 MCP shipproof_scan tool) promotes unsanitized interprocedural flows — route entrypoints through helpers into SQL, command-execution, and eval sinks — into L2 findings 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: SP662 Django wildcard CORS, SP663 Django non-secure session cookies, SP664 FastAPI routes without visible rate limiting, and SP665 Django DEBUG in 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 N scans 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.py measures 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/SP579 windows 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-breaking SP004), entropy calibration covers SP004/SP019SP021, and the AST engine detects concatenated and base64-encoded credentials.
  • Exit-code contract, end to end: scanner crashes (including RecursionError and raw Windows NTSTATUS statuses) exit 2 as invalid evidence instead of masquerading as gate blocks; gate timeouts and buffer overflows report actionable errors with SHIPPROOF_GATE_TIMEOUT_MS / SHIPPROOF_MAX_BUFFER_BYTES overrides.
  • Suppression integrity: shipproof-ignore markers 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, and end_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_scan accepts exclude, min_confidence, and cross_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 into severity_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 1 and evidence schema version 1.0 remain compatible; scan reports add optional column, end_line, end_column, and cross_file_flows_unsanitized fields (additive, schema-versioned).
  • --jobs 1 (default) and opt-out of --cross-file preserve prior behavior exactly.
  • Exit codes remain 0 for pass, 1 for a measured gate failure, and 2 for 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.