Skip to main content

OWASP API Top 10:2023

Vulkro covers all ten categories of the OWASP API Security Top 10:2023, plus the LLM Top 10 (LLM01 prompt injection, LLM06 PII in prompts).

IDCategoryNotes
API1Broken Object Level AuthorizationIDOR / BOLA - endpoints accept caller-controlled IDs without scoping checks. Highest-frequency category in real-world breaches.
API2Broken AuthenticationMissing auth, weak auth, sessions accepting forged tokens, JWT alg-confusion.
API3Broken Object Property Level AuthorizationMass-assignment / unbounded request body; clients can write fields they shouldn't (e.g. is_admin: true).
API4Unrestricted Resource ConsumptionMissing rate limits, unbounded query results, expensive search-without-pagination.
API5Broken Function Level AuthorizationPrivileged endpoints accessible to lower-privilege roles.
API6Unrestricted Access to Sensitive Business FlowsBot abuse: ticket scalping, signup fraud, account takeover via password reset.
API7Server Side Request Forgery (SSRF)User-controlled URL fed to a server-side HTTP client.
API8Security MisconfigurationCORS reflects origin + credentials, debug mode on, default secrets, insecure cookies.
API9Improper Inventory ManagementUndocumented / shadow endpoints, OpenAPI spec drift, unprotected admin paths.
API10Unsafe Consumption of APIsTrusting upstream API responses without validation; SSRF-style misuse.

How to read a finding

Every finding emitted by vulkro scan carries:

  • category - one of BrokenObjectLevelAuth, BrokenAuthentication, etc.
  • severity - Critical | High | Medium | Low.
  • confidence - High | Medium | Low.
  • confidence_reason - a one-line explanation. Example: "taint flowed from req.body to db.query without sanitiser" or "runtime-confirmed via active probe".
  • compliance_controls - a list of framework controls this finding relates to.

Beyond OWASP API: specialised detectors

Vulkro ships 50+ specialised detectors that don't always map cleanly to the OWASP categories:

  • Crypto weakness - md5 / sha1 / ECB / static IV / Math.random for secrets / pickle deserialisation.
  • Webhook signature bypass - patterns where signature verification is skipped or comparison is non-constant-time.
  • Slopsquat-style typosquatted packages - react-dom-extra, requets, lodahs, etc.
  • GraphQL safe-pattern checks - schema-suggestions enabled in prod, introspection over public endpoint.
  • Prompt injection / PII in prompt - LLM01 / LLM06.
  • Inline secrets in URLs - ?token=... in source / git history.