Checkov false positives — why audytx has 36× fewer
Most Terraform scanners check each resource in isolation, so clean infrastructure lights up with hundreds of findings — a Lambda flagged for a missing dead-letter queue even when nothing async ever invokes it. audytx pre-computes a graph of how your resources actually connect and flags only what context can't explain away — every suppressed finding stays visible with its rationale, never dropped silently.
The numbers
Measured against three other scanners on one corpus of clean, well-maintained AWS modules.
Why single-resource scanners produce so many false positives
A scanner that checks each resource in isolation has to fire every check that could apply — it can't see the context that makes the check irrelevant. Five patterns audytx suppresses, and the noise a single-resource scanner emits instead.
1. Lambda DLQ pattern
2. DLQ-needs-a-DLQ pattern
3. Ephemeral data pattern
4. Internal-load-balancer pattern
5. IMDSv2 inheritance pattern
The reasoning checks
Each check is a class of relationship that can prove a finding benign — computed once per scan across your full resource graph. The rule still fires; the context decides whether it survives.
How a suppression looks in the PR comment
Suppressed findings are never silently dropped — they land in a collapsible block in the PR comment, each with a plain-English rationale you can audit.
Disagree with a call? Override it in a .audytx-baseline.yaml file in your repo — see baseline suppression in the docs.
The benchmark: 21 clean production modules
All four tools ran against 21 well-maintained AWS community modules with an expected HIGH finding count of 0 — every finding here is noise, so lower is better. Full data and methodology: the benchmark page.
| Module | audytx | Checkov | Trivy | KICS |
|---|---|---|---|---|
| terraform-aws-iam | 3 | 287 | 1 | 0 |
| terraform-aws-ecs | 0 | 86 | 16 | 2 |
| terraform-aws-lambda | 6 | 112 | 23 | 7 |
| terraform-aws-rds | 2 | 124 | 7 | 1 |
| terraform-aws-alb | 4 | 54 | 13 | 2 |
| terraform-aws-eks | 6 | 88 | 38 | 1 |
| terraform-aws-s3-bucket | 3 | 129 | 18 | 4 |
| + 14 more modules | 9 | 313 | 59 | 17 |
| Total (21 modules) | 33 | 1,193 | 175 | 34 |
Start free during the open beta
Install audytx on one repo, open a PR that touches your ECS, Lambda, or IAM resources, and read the reasoning block on the first scan.
Secrets detection without entropy guessing
audytx flags a hardcoded credential only when its format proves it — fixed vendor prefixes and unambiguous key material. It skips entropy scoring entirely, so UUIDs, commit hashes, and key IDs never turn into triage work.
Flagged — the format proves it
Skipped — no format proof
Every pattern is grounded in the vendor's own published key-format documentation — the same discipline the reasoning layer applies to suppression: prove it, or stay silent.
Questions teams ask
Doesn't suppression hide real issues?
No — suppressed findings are never removed. They appear in a dedicated collapsible block in every PR comment, each with a plain-English explanation of why it was dismissed. You can always see what was reasoned away and why, and override any suppression in your .audytx-baseline.yaml.
How do I override a suppression I disagree with?
Add an entry to .audytx-baseline.yaml in your repo root specifying the rule ID and resource. audytx will stop suppressing that finding — it'll surface as a real finding on the next PR that touches the resource. You can set an expiry date so the override is time-bounded.
What if audytx is wrong about the context?
The reasoning checks are conservative — audytx only suppresses when the relationship in your Terraform configuration is unambiguous. If the configuration is incomplete or the connection can't be proven (e.g. the DLQ reference is behind a variable), the finding is kept. Incomplete evidence = no suppression.
Why does Checkov have 1,193 false positives on clean modules?
Checkov applies every check that matches a resource type, without asking whether the finding is warranted by the resource's actual role in the system. It has more checks (breadth) and less context reasoning (precision). On IAM privilege escalation, both tools reach full recall (100% of the 31 documented paths in the BishopFox iam-vulnerable corpus), and audytx does it at the highest precision of any tool with full recall. The gap between the two tools is entirely in clean-infrastructure precision.
Does audytx support suppression files like Checkov's .checkov.yaml?
Yes, via .audytx-baseline.yaml. You list rule IDs to suppress, optionally scoped to specific files or resources, with an expiry date. This is for cases the reasoning axes can't cover — team-specific decisions, known acceptable risks, or third-party modules you can't change.
Stop triaging false positives
Install audytx on one repo. Open a PR that touches your ECS, Lambda, or IAM resources. See the reasoning block — and how many findings don't make it through.
Install audytx free →See the full benchmark: audytx vs Checkov, Trivy, KICS, Terrascan →