hermes

Review an API against the OWASP API Top 10

Reviews an API design or implementation against the OWASP API Security Top 10, from object-level authorization and mass assignment to rate limits and SSRF, with attack paths and fixes.

context

APIs are breached through logic, not exotic exploits: an id in the URL changed to someone else's, a JSON field like role or account_id accepted on update, an admin route that only hides its link, a search endpoint with no page limit, a "fetch this URL" feature that reaches the cloud metadata service. Scanners rarely find these because they depend on who owns which object. The OWASP API Security Top 10 (2023 edition) names the recurring classes; a useful review applies each one to the actual endpoints and authorization model, and reports only what a real caller could do.

task

Review this API, exposed to callers:

api

Only if [AUTH_MODEL] is given:

Authentication and authorization model:

  1. Inventory the endpoints (or GraphQL queries and mutations): method, path, authentication required, the objects they read or change, and the identifiers they accept from the caller.
  2. Check each endpoint against the OWASP API Security Top 10 (2023):
  • API1 Broken object level authorization: every object loaded by a caller-supplied id is checked against the caller's ownership or tenant, in the query or right after loading, including nested and bulk endpoints.
  • API2 Broken authentication: token validation (signature, expiry, audience, issuer), credential endpoints protected against stuffing, password reset and API key handling.
  • API3 Broken object property level authorization: mass assignment (fields like role, is_admin, owner_id, price, status bound from input) and excessive data exposure (responses returning internal or other users' fields).
  • API4 Unrestricted resource consumption: rate limits per caller, page size limits, payload, upload and query complexity limits (GraphQL depth and cost), timeouts, and costly downstream calls (email, SMS, paid APIs).
  • API5 Broken function level authorization: admin or privileged operations checked on the server by role, not by URL obscurity or the client.
  • API6 Unrestricted access to sensitive business flows: flows that cause harm when automated (sign-up, checkout, coupon redemption, booking), and the anti-automation they need.
  • API7 Server-side request forgery: any endpoint that fetches a caller-supplied URL or host (webhooks, imports, previews) and whether it blocks internal ranges, metadata endpoints and redirects.
  • API8 Security misconfiguration: CORS, verbose errors and stack traces, missing TLS, unnecessary HTTP methods, debug endpoints.
  • API9 Improper inventory management: old versions, undocumented or test endpoints, and environments with weaker controls.
  • API10 Unsafe consumption of APIs: data from third-party APIs trusted without validation, and redirects or callbacks followed blindly.
  1. For each finding, write the attack path: the attacker's starting access, the request (method, path and the relevant part of the body), and what they get. Use the code where available; for a spec alone, say what must be confirmed in the implementation.
  2. Give the fix in the API's own framework and patterns: where the check goes, the allowlist of bindable fields, the limit values as starting points, and a test that would catch a regression.

If authorization rules are not described and cannot be inferred from the code, ask who may access which objects, because most findings depend on it. Review the rest meanwhile.

constraints
  • Report only findings with a concrete attack path from the input; put things you could not verify under "Not reviewed" or as questions.
  • Rank by impact and ease: cross-tenant data access and privilege escalation first.
  • Keep proof-of-concept requests minimal and against the described API only; never include payloads for third-party systems.
  • Do not restate the OWASP descriptions; apply them.
  • Read the relevant code before making a claim about it. Do not guess what a file, function or config contains.
  • If the information you need is not available, say what is missing and how to get it instead of inventing it.
output format

Verdict

One line: ready to expose | fix before exposing | do not expose. Then the top risk in one sentence.

Coverage

Table: OWASP category | status (finding, ok, not applicable, not verifiable from input).

Findings

Numbered, most severe first. Each: severity - OWASP id - endpoint - attack path - fix - regression test.

Endpoint matrix

Table: endpoint | auth | object checks | bindable fields | rate limit | notes.

Fix plan

Ordered list of changes, smallest high-impact fixes first.

Not reviewed

What the input did not cover and what to send to finish the review.

1 required value still a placeholder; the assistant will ask for it.

details

kind
Prompt: a task you run by name to get one finished thing back
domain
Software engineering
category
Security
level
Expert
made for
Backend engineer, Security engineer, Software architect, Software engineer
needs
repo-read
risk
read-only
version
v1.0.0 · experimental
reviewed
2026-10-02
works in
Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Antigravity, OpenCode, Windsurf, Zed, Continue, AGENTS.md

Edit on GitHubReport a problem

use in

Hodios CLI
npx @hermes-hq/hodios install review-api-security --target claude-code
Agent Skills
npx skills add hermes-hq/hodios-dist --skill review-api-security -a claude-code
Add the Hodios marketplace (once)
claude plugin marketplace add hermes-hq/hodios-dist
Install the software-engineering plugin
claude plugin install hodios-software-engineering@hodios

The plugin brings every entry in this domain at once.

pairs well with

All of Security
PromptSecurity

Review an authentication flow

Reviews an authentication or session design (OAuth or OIDC, tokens, cookies, MFA, password reset) for known flaws, with attack paths and fixes. Use before building or shipping login and session code.

review-auth-flow
PromptSecurity

Threat model a feature

Builds a threat model for one feature or change, mapping data flows and trust boundaries to ranked threats and mitigations. Use during design, before the code is written or merged.

threat-model-feature
PromptSecurity

Review a pull request for security

Reviews a diff for exploitable vulnerabilities and reports only findings with a concrete attack path. Use before merging changes to input handling, auth, data access or dependencies.

review-pr-for-security
PromptArchitecture

Design an API contract

Designs an API contract before implementation, with operations, schemas, errors, pagination, idempotency and evolution rules. Use when adding an API that other teams or clients will call.

design-api-contract
PersonaSecurity

Security auditor

Reviews code for exploitable weaknesses and reports only issues with a concrete attack path. Use as a reviewer persona or subagent for security-sensitive changes.

security-auditor
PromptSecurity

Respond to a leaked secret

Produces an ordered response plan for an exposed key, token or password - revoke and rotate, audit use, clean up copies, notify and prevent. Use right after a secret is committed, logged or shared.

respond-to-leaked-secret