Security scan
Skill byerlikaya/claude-starter-kit/claude-starter/skills/security-scan
Stack-agnostic security audit: map the attack surface, trace untrusted input to dangerous calls, surface dependency and configuration flaws. Severity-ranked report with fixes. Trigger phrases: "security scan", "run a security scan", "OWASP check", "scan for vulnerabilities", "find security vulnerabilities", "security audit"From its SKILL.md
npx -y skills add byerlikaya/claude-starter-kit --skill security-scanAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 22 stars22 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.0 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
Security Scan
The core of a security vulnerability fits in a single sentence: an untrusted input reaches a dangerous operation without being adequately checked. This skill chases exactly that sentence — it first looks for where the input comes from, then where it flows, and what gate should sit in between. It is stack-agnostic: whatever the language/framework, the same logic applies; when current tooling and patterns are needed, it runs a web search.
Kit adaptation (local, .claude/):
security-expert-cskapplies this; findings are carried to review-agent-csk in severity order. It also holds for the default stack (.NET/PostgreSQL). Automatic fixes only with explicit approval (§4.4);.claudedoes not go to the repo (§4.3). §4 Prohibitions apply.
What it does, what it doesn't
- Does: surfaces common vulnerability classes, known vulnerable dependencies, and risky configuration; ties each finding to a concrete fix.
- Doesn't: does not replace a professional pentest / SAST / DAST. The report guides, it does not give full assurance — state this at the end of the report.
- Boundary: analysis is local; code/data is not sent to an external service, and the project directory is not left.
Mental model — source → gate → sink
Reduce every check to three questions:
- Source — where does the input enter? (route, API endpoint, form, CLI argument, file upload, WebSocket, queue message, external API response)
- Sink — which dangerous operation does this input reach? (SQL execution, shell, file path, HTML render, deserialization, template)
- Gate — is there validation / parameterization / escaping / authorization in between? If not, that's the finding.
The scan applies this model on four fronts: dependency · code · configuration · authorization. The result is ranked by severity, and the fix is presented for the user to choose.
Scope
Prefer docs/THREAT_MODEL.md if present (from the threat-model skill): its entry points and attack classes
are the focus areas, and its impact/likelihood bias which findings count as high severity — the biggest lever on
false positives. No threat model → map the surface yourself first (Front 0 · Discovery).
Checklist
- Stack and package ecosystem(s) detected, attack surface mapped
- Dependency audit run for each ecosystem
- Source→sink paths traced across the four vulnerability classes
- Configuration and secret leakage scanned
- Authorization matrix produced, unprotected sensitive endpoints searched for
- Each candidate adversarially verified (N-verifier disprove pass); FALSE_POSITIVE / CANNOT_VERIFY separated out
- Severity derived from preconditions × access (not the scanner's category); verification ≠ severity
- Findings reported in severity order, no secret disclosed; ruled-out findings recorded too
- Fix options presented to the user
Fronts
Five review fronts — Discovery · Dependencies · Code (source→sink) · Configuration · Authorization: references/fronts.md (read the fronts you're scanning).
When you fan out a sub-agent per front, how you prompt it decides recall — describe vulnerability shapes not a
checklist, scope each agent, and state that vulnerabilities exist: references/prompting.md.
Verify before you report
Discovery is deliberately noisy (recall-biased); a separate adversarial pass disproves each candidate before it
reaches the report — the biggest lever on false positives. Run N independent verifiers per finding (each starts
from the code, not the summary; each hunts for why it's wrong), classify TRUE_POSITIVE / FALSE_POSITIVE /
CANNOT_VERIFY, then derive severity from preconditions × access (independently — "real" is not "critical").
The verifier procedure, the false-positive exclusion rules, the parseable verdict block, and the severity matrix
live in references/verify.md. Ruled-out findings are recorded, not silently dropped.
Report
The severity scale, finding format, summary line, and the fix-presentation format live in references/reporting.md.
Invariant rules
- Guides, does not assure — it does not replace a professional audit; say so in the report.
- Mask secrets — only the first 4 + last 4 characters (
sk-p…i789); never write the full secret. - No automatic fix without approval — even if "Fix everything" is chosen, first show what will change.
- Do not install tools without asking.
- Preserve behavior — a fix must not change functionality beyond closing the vulnerability.
- Stay local — do not send code/data to an external service, do not cross the project boundary.
What ships with it: 4 files
15.0 KB alongside SKILL.md
references/
- fronts.md5.5 KB
- prompting.md2.0 KB
- reporting.md2.7 KB
- verify.md4.7 KB