Batou v2.0.0 is the biggest release since the project went public: 2.5 months of engine development landed in one sync (#24) — 3,310 files, +474k lines.
Highlights
Cross-file taint analysis (14 languages)
Batou now builds a project call graph with per-language extractors and follows taint across file boundaries: a source in routes/users.js flowing through a helper to a sink in lib/db.js is caught end to end, with the full propagation path in the finding. Includes stored-state taint (instance fields, module globals) and cross-language HTTP service-boundary routes (a JS fetch feeding a Python Flask handler).
batou scan — whole-repo scanner
batou scan . # parallel scan, JSONL findings
batou scan --sarif --fail-on high . # SARIF 2.1.0 out, CI gate (exit 3)
Scans a repo over a shared in-memory call graph with a cross-file finalize pass. SARIF output carries taint paths as codeFlows and stable fingerprints, ready for github/codeql-action/upload-sarif. Running batou scan once also arms the hook's incremental cross-file lane for that project.
ssaflow — second Go engine
A new SSA-based taint engine (golang.org/x/tools/go/ssa) runs alongside the AST walker: def-use chains, cross-function fixpoint summaries, and module-local cross-package analysis. On by default; BATOU_SSAFLOW=0 opts out.
Deeper analysis everywhere
- Taint catalogs grew from 3,254 to 10,664 entries across 17 languages (Shell is new)
- +58 regex rules; new
perlast,shellast, andzigastanalyzers - Major C/C++ analyzer expansion: use-after-free, double-free, TLS and libc hardening
- Precision mechanisms: barrier guards, argument-shape and payload-position sink gating, sanitizer-aware cross-file walks
Suppression you can trust
batou:ignorereasons are now adjudicated: a suppression whose justification contradicts the finding's own dataflow is flagged (BATOU-SUPPRESS-UNJUSTIFIED)- gosec
#nosecannotations are recognized
Benchmarks in-tree
A committed 13-language benchmark corpus plus six offline CVE ground-truth benches (real CVE repros, Log4Shell and Spring4Shell included) with make targets and a consolidated scorecard.
Install
brew install turenlabs/tap/batou && batou-setup
Full diff: v1.0.0...v2.0.0