CI security gate · 124 calibrated gates

Real taint tracking.
Not regex.

Most CI scanners match a pattern on a line. The Firewall follows the value — through variables, helper functions, across files, and down import chains — until it reaches a dangerous sink. Five analysis layers, 124 gates, and a calibration that means it doesn't cry wolf.

0 false alarms · 5,000+ real reposZero-egress · your code never leaves the runnerJS/TS · Python · Go · .NET
Protect a repo — $29/moSee a live runPublic repos free · private $29/repo/mo
How deep it sees

Five layers of analysis, on one value.

A user-controlled value rarely reaches the sink on the same line it entered. The Firewall tracks it the whole way — the 11 dataflow gates run all five layers.

1

Direct

The user value is the sink argument, inline — requests.get(request.args['url']).

2

Intra-function dataflow

The value flows through variables before the sink — the two-step a regex misses.

3

Inter-procedural

The value is passed to a local helper whose parameter reaches the sink.

4

Cross-file

The helper is imported from another module — resolved through the import graph.

5

Multi-level chains

A helper that calls a helper that calls the sink — followed to a fixpoint, intra-file and across imports.

# utils.py
def fetch(u):  requests.get(u)     # the sink
def load(u):   fetch(u)             # chain, level 2
# routes.py
from .utils import load
def handler():
    load(request.args['url'])       # user → load → fetch → SSRF · CAUGHT
What it covers

124 gates across the OWASP injectable surface.

Each gate is calibrated to the unambiguous vulnerability shape and scoped out of the adjacent safe pattern. The 11 dataflow gates go all five layers deep.

Injection · dataflow

CWE-918SSRF5-layer
CWE-89SQL injection5-layer
CWE-78Command / code5-layer
CWE-22Path traversal / LFI5-layer
CWE-943NoSQL injection5-layer
CWE-1336Template (SSTI)5-layer
CWE-79XSS5-layer
CWE-90LDAP injection5-layer
CWE-643XPath injection5-layer
CWEGo SQL injection5-layer
CWE.NET SQL injection5-layer

Auth · access · deser

CWE-287JWT alg-none / bypass
CWE-798JWT secret in code
CWE-611XXE
CWE-352CSRF disabled
CWE-502Insecure deserialization
CWE-915Mass-assignment
CWE-1321Prototype pollution
CWE-601Open redirect

Crypto · dos · supply · infra

CWE-327Weak crypto
CWE-338Weak randomness
CWE-1333ReDoS
CWE-22Zip-slip
CWE-377Insecure temp-file
CWE-319gRPC cleartext channel
CWE-250K8s privilege
+ access-control · secrets · supply-chain · RLS — 124 total
Why you can turn it on

Precise enough to block. Private by construction.

A gate that cries wolf gets disabled within a week. Every gate is calibrated to zero false alarms on real production code — and the classification brain never leaves your runner.

0 false positives

Calibrated on 5,000+ real repos

Across 5,000+ real repos — the injection dataflow layers fire on the vulnerable shape and stay silent on the sanitized one (a parameterized query, a validated URL, a basenamed path).

3 fields leave

Zero-egress client

The open-source runner extracts a structural fingerprint in place and sends only its shape. Your source never leaves the CI runner; the classification rules never ship to it.

{ file, line, kind }  ✗ source · ✗ secrets · ✗ query text
One line in your workflow

Stop shipping the vulnerability a regex can't see.

Add the gate to CI, protect a private repo for $29/mo, and block on a reliable cross-tenant leak — while every failure path fails open, so an outage never breaks your build.

Public repos free · private $29/repo/mo · annual discount