OWASP NodeGoat

github.com/OWASP/NodeGoat — small Express training app with a clean mapping to OWASP Top 10.

Results

toolfindingswall-clock
rastray150.33 s
semgrep1511.3 s
gitleaks31.4 s
eslint-security5463.9 s
banditN/A
gosecN/A

What rastray fires on

codecountwhat it catches
RSTR-CRY-0057Math.random() for security
RSTR-INJ-0034eval / new Function
RSTR-NOSQLI-0022Mongo $where with request input
RSTR-REDOS-0011Catastrophic backtracking
RSTR-RDR-0011Express res.redirect(req.x)

Headline observation

rastray and Semgrep report the same number of findings (15) on NodeGoat, but rastray runs 34× faster (0.33 s vs 11.3 s, both on the same hardware). The rule mix differs slightly — rastray catches more Math.random() / eval cases, Semgrep catches a few more interprocedural cases that need a small amount of flow.

On the eslint-security count (546)

532 of the 546 are security/detect-object-injection. The other 14 are genuine — they cover roughly the same surface as rastray's 15 and Semgrep's 15. Most teams disable detect-object-injection for exactly this reason; once that's done, the three tools are comparable on this benchmark.

Reproduce

powershell -File scripts/benchmarks/run.ps1 -Target nodegoat