secure-code-review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited secure-code-review (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Secure code review is not a checklist audit - it is a focused search for the flaw categories that actually cause breaches. A 40-finding report gets skimmed and ignored; a 5-finding report where every item is exploitable gets fixed. The costly mistake this skill prevents is spending review time evenly across the diff while the one missing ownership check ships to production.
Work the steps in order: scope first, then the highest-breach-rate categories, then filtering, so scrutiny lands where risk lives.
If entry points are unclear, trace them from the router or handler registry before reviewing anything, and label inferred entry points as guesses.
Spend time proportional to risk: auth logic and untrusted-input handling get the deepest read; rendering, styling, and config get a skim. Any function reachable from untrusted input is in scope; pure internal refactors of trusted data are not.
Broken authorization (OWASP A01) is the most common high-severity finding. For every action that reads or mutates a resource:
Bad - authenticated but not authorized:
@app.get("/invoices/<invoice_id>")
def get_invoice(invoice_id):
user = require_login() # proves identity only
return db.invoices.find(id=invoice_id) # any logged-in user reads any invoiceGood - ownership enforced in the query, uniform response:
@app.get("/invoices/<invoice_id>")
def get_invoice(invoice_id):
user = require_login()
invoice = db.invoices.find(id=invoice_id, owner_id=user.id)
if invoice is None:
abort(404) # same response for missing and forbidden - no existence oracle
return invoiceFor any code that constructs queries, commands, or markup from user input:
Any outbound HTTP request with a URL derived from user input is an SSRF candidate:
Raise: anything letting an attacker access data or perform actions beyond their authorization, execute code, or exfiltrate secrets. Skip: style issues, missing logging (unless the gap breaks audit requirements), and theoretical issues with no realistic attack path in the current deployment. Target roughly seven findings or fewer, ordered by severity; a longer list means the filter was not applied.
Each finding: file and line, flaw class, one-sentence attack scenario ("an authenticated user can read any tenant's invoices by iterating IDs"), severity (Critical for unauthenticated data access or code execution; High for authenticated cross-user access; Medium for issues needing chaining or non-default config), and the concrete fix - the specific code change, not "sanitize input".
Produce a findings report containing: the reviewed scope and entry points, at most about seven findings each with file:line, flaw class, one-sentence attack scenario, severity, and a specific fix, plus an explicit "checked, clean" list of the categories reviewed with nothing to raise.
Route general readability and maintainability review to code-review-checklist, prioritization of scanner output to vulnerability-triage, design-stage questions to threat-model-stride, and any hardcoded credential found mid-review to secrets-hygiene immediately - a live secret in code outranks every other finding.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.