Skip to content

v0.6.1

Choose a tag to compare

@peaktwilight peaktwilight released this 12 Apr 18:44
· 657 commits to main since this release

Precision & quality release

25 commits since v0.6.0 focused on precision, quality, and developer experience.

New rules & sources

  • Kotlin taint rules: kt/taint-sql-injection, kt/taint-command-injection, kt/taint-ssrf with Ktor + Spring Boot sources
  • NoSQL injection: py/taint-nosql-injection, js/taint-nosql-injection, go/taint-nosql-injection for MongoDB
  • XXE taint: py/taint-xxe, js/taint-xxe with defusedxml sanitizer support
  • Log injection: py/taint-log-injection, js/taint-log-injection, go/taint-log-injection
  • Deserialization: js/no-unsafe-deserialization, go/no-unsafe-deserialization
  • JWT: py/jwt-no-verify, py/jwt-hardcoded-secret, go/jwt-no-verify, go/jwt-hardcoded-secret
  • Java XSS, C# path traversal, Ruby SSRF + path traversal, Go path traversal taint
  • Framework sources: Koa, NestJS (JS), Echo/Fiber/Chi (Go), Tornado/Bottle (Python)

Taint engine fixes

  • Python walrus operator (:=) now tracked
  • JS await expressions no longer break taint chain
  • Go type assertions preserve taint
  • JS spread elements (...arr) propagate taint
  • Python comprehensions propagate taint
  • Ternary/conditional expressions propagate taint in Python + JS
  • JS export default functions now included in cross-file summaries

Precision improvements (false positive reduction)

  • LDAP rules: .search()/.bind() no longer match String.search()/Function.bind()
  • NoSQL rules: .find() restricted to MongoDB collection patterns, not Array.find()
  • Log injection: .error()/.log() restricted to console.* to avoid generic method FPs
  • Ruby system("literal") no longer fires
  • NoSQL severity downgraded from Critical → High
  • Sanitizers now match fix suggestions: shlex.quote, DOMPurify.sanitize, shellescape, html.escape, encodeURIComponent all recognized
  • Fix suggestions always visible (not gated behind --explain)
  • Noise path exclusions: /spec/, /__tests__/, /__snapshots__/, /generated/, /gen/, /stubs/

Refactoring

  • impl_rule! macro eliminates 1,665 lines of boilerplate across 174 rules
  • Single-pass language partition in scanner (was 3 separate filter passes)
  • Integration tests organized into 12 language-grouped modules

Totals

  • 174 built-in rules across 10 languages
  • 337 tests all passing
  • Cross-file taint for Python, JavaScript, Go

Upgrading

npx foxguard@0.6.1 .

What's Changed

Full Changelog: v0.6.0...v0.6.1