api-security — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited api-security (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
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.
This skill is the API-specific lens: REST and GraphQL endpoints, their auth, their contract, their abuse surface. It complements security-review when the code is an API layer, and it is invoked by framework skills (django-security, spring-security, rails-security, nextjs-security) for the API-specific rules.
Triggers on:
security-review or a framework skill that points to API-specific depth.secure-coding.web-exploit-triage and payload-crafter.cve-triage.iac-security.Seven phases organized around OWASP API Security Top 10 2023 (API1–API10). Each phase covers one or more API categories.
What is not documented cannot be audited. Always start with the inventory.
alg: none rejected. Prevent algorithm confusion (do not accept an RS256 key as an HS256 secret). Expiry (exp) and not-before (nbf) checked. kid in the header must hit a whitelist, not be used for unvalidated key lookup.Authorization: Bearer or a custom header. Rate-limit per key (see phase 4).Multi-factor for admin and privileged flows. Recovery flows (password reset, e-mail change, MFA reset) are separate auth paths with their own weaknesses; review them separately.
The three authorization categories from the OWASP API Top 10 together. This is where most production bugs live.
/api/documents/{id} checks authentication but not whether the actor is allowed to see {id}. Fix: ownership check on every lookup path. Not at the route level, at the resource level. Query like SELECT * FROM documents WHERE id = :id AND (owner = :user OR :user IN shared_with).{"id": 1, "role": "admin"} and the API accepts role blindly. Fix: input schema that whitelists only accepted fields. Output schema that does not return sensitive fields (e.g. password_hash, internal_notes). Framework primitives: DRF Serializers, Spring @JsonIgnore, Rails strong_parameters, Pydantic model_dump(include=...).Authorization tests belong in the integration suite, not only in the code review.
Rate-limit responses: HTTP 429 with Retry-After header, not 503 or timeout. Logs must record rate-limit hits with identity, endpoint, and window.
SafeRequests in Python, safe-request in Node).Access-Control-Allow-Origin: * is acceptable only on explicitly public, non-auth endpoints). Security headers: HSTS, CSP, X-Content-Type-Options: nosniff, X-Frame-Options, Referrer-Policy. Default error pages that do not leak stack traces or framework info. Verbose API errors back to the client only in non-prod.CORS-specific: Access-Control-Allow-Credentials: true with Origin: * is impossible and some browsers block it, but the misconfiguration attempt itself signals that the auth model has not been thought through.
REST checks above largely apply to GraphQL too, plus:
introspection: false in Apollo, GraphQLSchema without __schema resolver). Reduces the recon surface. Alternative for devs: commit the schema as a file and serve it locally.graphql-depth-limit (Node), graphql-core query-complexity (Python).If your API itself consumes other APIs (third-party, internal services), you are also the attacker's target surface via transitive trust.
verify=False.secrets-scanner.Report structure (compatible with the security-review report format):
API security review — <service/scope>
Contract: <OpenAPI 3.x file | GraphQL SDL | none (blocker)>
Endpoints in scope: N | Tested: M
OWASP API Top 10 2023 pass:
API1 BOLA: <clean | findings: ...>
API2 Broken Authentication:<clean | findings: ...>
API3 BOPLA / mass assign: <...>
API4 Resource consumption: <...>
API5 Function-level authZ: <...>
API6 Business-flow abuse: <...>
API7 SSRF: <...>
API8 Misconfiguration: <...>
API9 Inventory: <...>
API10 Downstream APIs: <...>
GraphQL-specific (if applicable):
Introspection in prod: <off | on - finding>
Depth limit: <n | none - finding>
Complexity scoring: <on | none - finding>
Batching limit: <n | unlimited - finding>
Findings (severity-sorted, blockers first, follow security-review format)
Verification-loop:
Verdict: ...
Security verdict: ...Findings themselves as in security-review: location, CWE/API category, severity, reproduction, fix direction. Reproduction preferably as a curl example against a test endpoint, not against production.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.