We scanned real AI/agent repos with SecureAI-Scan — here's the evidence (and what it cost to keep zero false positives) #19
akanthed
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
We scanned real AI/agent repos with SecureAI-Scan — here's the evidence (and what it cost to keep zero false positives)
Most scanners in this space prove their claims on fixtures they wrote themselves. That's necessary but not sufficient — it only proves the scanner behaves on code written to test it. So
npm run regressionruns the built CLI against a curated set of real, public LLM/MCP/RAG repos and checks the result against a hand-reviewed baseline, gated in CI. Here's what that's actually turned up.The headline result: a labeled ground-truth test
cisco-ai-defense/skill-scanner ships an
evals/corpus built to evaluate Agent Skill scanners — pre-labeledmalicious/andsafe/directories, so this is a graded test, not a judgment call.exec()s a remote payload, a skill whose body reads "Ignore all previous instructions..."safe/What zero-false-positive actually costs — a live example from this week
We just added static config scanning for LiteLLM Proxy (hardcoded secrets, plaintext provider endpoints, missing guardrails). None of the repos already in the regression set exercise those rules, so we added BerriAI/litellm itself — the official repo, ~7,000 TS/JS files plus a large Python codebase, a genuinely harder target than anything we wrote ourselves.
First pass against it surfaced three real bugs before it confirmed one real finding:
api_keyin the whole file — not the line with the actual offending value. In a file with dozens ofapi_key:entries, the reported evidence could point straight at anos.environ/...reference and contradict itself.fake-key,sk-lar1-demoto demonstrate config shape. Flagged as leaked secrets until we added a "does this look like a random credential blob or a human-typed phrase" check.Two more false positives (a settings description containing the words "system prompt," a URL parser flagged because its parameter happened to be named
url, Python'sre.search()confused for a vector-store search) surfaced once the scan could actually complete.After all six fixes: the scan came back with exactly one confirmed-real finding — a plaintext
http://provider endpoint in a proxy config — and every fix shipped with a permanent regression fixture so none of the six can come back silently.Full writeup with source lines:
docs/RealWorldFindings.mdTry it
npx --yes secureai-scan@latest scan .Offline, no account, no config. Findings default to
proven/likelyevidence only — heuristic matches are opt-in behind--paranoid.Feedback, false positives, and "you missed this" reports are genuinely wanted — that's exactly how the six bugs above got found.
All reactions