What it catches
| Category | Examples |
|---|---|
| Injection | SQL injection, command injection, NoSQL injection, LDAP injection |
| Cross-site scripting | Reflected XSS, stored XSS, DOM XSS |
| Path traversal | ../../etc/passwd-style file access via user input |
| Insecure deserialization | pickle.loads(user_data), Java readObject on untrusted input |
| SSRF | Server-side request forgery from user-controlled URLs |
| Hardcoded secrets | API keys, tokens, private keys (overlap with the dedicated Secrets scanner — run both, results de-dupe) |
| Weak cryptography | MD5, SHA1, ECB, hardcoded IVs, predictable RNG |
| Missing authentication | Endpoints without an auth check |
| CWE-mapped | All findings carry the canonical CWE ID for compliance reporting |
Languages supported
| Language | Status |
|---|---|
| JavaScript / TypeScript | Full |
| Python | Full |
| Go | Full |
| Java / Kotlin | Full |
| Ruby | Full |
| PHP | Full |
| C# | Full |
| Rust | Beta |
| C / C++ | Beta |
| Swift | Beta |
| Scala | Beta |
Rule packs
TigerGate ships with three layers of rules, all enabled by default and configurable from Code Security → SAST Rules:- Public security packs — OWASP Top 10, CWE Top 25, security-audit, secrets, SQL injection, XSS, command injection, insecure-transport, JWT, plus per-language packs (Python, Node.js, Go, Java, C#, Ruby, PHP, React).
- AI / LLM pack — ~127 rules covering LLM provider key leaks (OpenAI, Anthropic, Cohere, Gemini, Mistral, HuggingFace), prompt injection, MCP tool poisoning and command injection, LangChain dangerous-exec, and AI agent / hook security (DNS exfiltration, path traversal, sensitive file access).
- TigerGate catalog — our internal ruleset shipped to the CLI at scan time. Covers SSRF, path traversal, deserialization, weak crypto, and auth-bypass classes.
- Org-level is the default — applies to every repository unless overridden.
- Repo-level shadows org-level for that one repo. The dashboard’s
Configure fordropdown switches scope.
- Toggle whole rule packs on/off in the Configuration tab.
- Disable individual rules from the Catalog tab (the rule ID flows through to the scanner as a per-rule exclusion).
- Override severities (e.g., demote a rule from
hightomediumfor quality-gate purposes).
Catalog browser
Code Security → SAST Rules → Catalog lists every rule that ships in the configured rule packs, grouped by language. Each entry shows:- Rule ID, severity, CWE/OWASP mapping
- “Why it matters” with vulnerability context
- Side-by-side Noncompliant vs Compliant code for the languages we have curated examples for
- A per-rule Disable button that scopes to your current
Configure forselection (org or repo)
Custom rules
Author your own rules under Code Security → SAST Rules → Custom Rules. They’re org-scoped by default; switch theConfigure for dropdown to a repository to scope them to one repo.
Custom rules ride along on every CI scan automatically — no CLI changes, no commits to a .tigergate-rules/ directory. The dashboard editor takes a single rule body (no wrapper); TigerGate merges enabled rule bodies into the served ruleset at scan time.
Validation before save
TigerGate validates the rule body server-side before committing it. If the YAML has parse errors, missing required fields (id, message, languages, severity, a pattern), or invalid value shapes, save is blocked and errors are shown inline.
The validator checks:
- YAML parses (line/column reported on parse errors)
- Required keys present (
id,message,languages,severity, plus a pattern form) idmatches the allowed character set (1–149 chars of letters, digits,_,-,.)severityis one ofERROR,WARNING,INFO,INVENTORY,EXPERIMENTlanguagesis a non-empty array of stringspatternsandpattern-eitherare lists when present- Unknown top-level keys produce warnings (non-blocking)
Suppressing false positives
In the dashboard — open the finding, click Mark as MUTED, and add a justification. Mutes are scoped per-(rule, file path), so a single mute won’t hide the same rule firing somewhere else. Whole paths — exclude test or vendor directories at scan time with--exclude (e.g. --exclude test,fixtures,vendor), or set the repo’s excluded paths in its dashboard settings.
Performance
| Repo size | Typical scan time |
|---|---|
| < 50k LOC | 30–60s |
| 50k – 500k LOC | 1–3m |
| 500k – 5M LOC | 3–10m |
| Mono-repo > 5M LOC | 10–30m |
--scan-scope diff reports only findings on lines the PR changed, which runs
much faster on large repos and keeps PR feedback high-signal.