Security holes are like ghosts: invisible until someone walks right through them. 👻
You ask Claude Code or any AI, "is this code secure?", and get a list of findings. Some come with the exact attack and the fix, some don't, and you can't tell which ones an attacker can actually reach.
So I wrote security-audit, a free skill for Claude Code. It also installs into Codex, Cursor, Gemini CLI, GitHub Copilot and 50+ other agents with one command. Every finding has to come with the file and line, the exact request an attacker would send, and the fixed code. No proof, no finding.
Try it (free, source on GitHub):
npx skills add WST2002/claude-code-skills --skill security-audit
Then ask your agent: "Do a security review of this project."
â–¶ Watch the 36-second demo on YouTube
What it found in a small shop API
I gave it a tiny Express API with 10 security holes hidden on purpose and 3 traps that look dangerous but are safe (a parameterized query, a .env.example with placeholders, a Math.random() that only shuffles banners).
- It found all 10 holes, plus 3 more real ones (a one-request crash, an email leak, missing security headers).
- It flagged none of the 3 traps. It even listed them under "checked and clean" with the reason.
- Every finding came with the attack and the fix. Here's the top one:
### [CRITICAL] JWT is decoded but never verified
- Location: auth.js:11
- Evidence: const payload = jwt.decode(token);
- Attack: send a token with {"alg":"none"} and {"id":1,"role":"admin"}.
Every logged-in route accepts it: you are user 1, as admin.
- Fix: payload = jwt.verify(token, process.env.JWT_SECRET, { algorithms: ["HS256"] })
- Confidence: High
And it connects the holes: the hardcoded JWT secret can be read through the path traversal (/files/download?name=../auth.js), so fixing jwt.decode alone doesn't close the door.
How it works
1. Find every way in
- Routes, CLI args, uploads, webhooks, queue consumers, scheduled jobs.
2. Follow untrusted input
- From each entry point to where it lands: a SQL query, a shell, a file path, HTML, a redirect.
3. Sweep by class, not by luck
- SQL and command injection, auth bypass, IDOR, path traversal, XSS, SSRF, secrets, CORS, vulnerable dependencies: a checklist with search patterns for each.
4. Prove it or drop it
- Is the input really attacker-controlled? Is there a check on the way? Is the code reachable in production? If not, it's dropped or marked low confidence.
5. One report you can act on
-
N findings: X critical, Y high…, then one block per finding (location, evidence, attack, fix, confidence), and a "checked and clean" list so you know what was looked at.
Honest numbers
I ran the same test without the skill too. Claude found the same 10 holes. What the skill changed is the report: every finding now has the exact attack request, fix code you can paste, and a confidence level, plus the "checked and clean" list. Without it, some findings had those and some didn't. The test project and the answer key are public in benchmarks/security-audit, with the results in the benchmarks README.
Get it
-
Install:
npx skills add WST2002/claude-code-skills --skill security-audit, or copy the folder into~/.claude/skills/ - Source (MIT): security-audit on GitHub
- All my Claude Code skills: github.com/WST2002/claude-code-skills
- Approved for awesome-claude-skills: the maintainer of awesome-claude-skills approved security-audit for the list (PR #477)
- Short demos: youtube.com/@wst2002rk
More free tools from me
proof-of-done: a Claude Code plugin that won't let Claude say "done" until the tests pass. Featured on the HOL blog.
- Install:
/plugin marketplace add WST2002/claude-code-skillsthen/plugin install proof-of-done@claude-code-skills - Plugin folder on GitHub · 36-second demo · the story behind it
which-ai-to-use: Claude limit ran out mid-task? Hand the whole task to Codex or another AI in one command, without re-explaining anything.
- Try it:
npx which-ai-to-use - npm · VS Code Marketplace · Open VSX (Cursor, Windsurf) · GitHub
- Not a developer? The website suggests the right AI app for any task
- 36-second demo · the story behind it
Happy Halloween 🎃 What's the scariest thing a security review ever found in your code?

Top comments (0)