How it works

How Ryft tests your APIs

Ryft ships 46 security checks that span all 10 OWASP API Security Top 10 (2023) categories, plus LLM/AI endpoints. Every finding is oracle-backed and carries an honest confidence level — Ryft proves a vulnerability with a differential or an oracle, it never guesses from a status code.

46security checks
10 / 10OWASP API Top 10
6LLM / AI checks
REST + GraphQLprotocols tested

Coverage

Every OWASP API Top 10 category

The OWASP API Security Top 10 (2023) is the industry baseline for API risk. Ryft covers all ten — these are the exact categories it tags findings with, and the checks it runs for each.

Beyond the API Top 10, Ryft also tests LLM & AI endpoints — prompt injection (direct, stored & jailbreak), system-prompt leakage, insecure output handling and sensitive-information disclosure — mapped to the OWASP LLM Top 10 and MITRE ATLAS.

See how Ryft compares to Burp, Caido & Noname →

Methodology

How a Ryft scan actually works

Ryft is built to be right. It models the API first, confirms every vulnerability with an oracle or a differential, and tells you how sure it is — so you spend time on real findings, not triage.

1 · Recon & discovery first

Before testing, Ryft builds a model of the API: endpoints, parameters and per-origin baselines, imported or inferred OpenAPI specs, and identifiers located across path, query, body, header and cookie carriers — enriched by JavaScript intelligence. Checks probe a real model, not a flat URL list.

2 · Oracle-backed detection

Ryft confirms rather than guesses. SQL-error signatures, an arithmetic oracle for template injection, a command-output oracle (id / passwd / win.ini) or timing for command injection, file-content markers for traversal and XXE, and a response-similarity oracle for authorization.

3 · Differential & role-matrix proofs

BOLA replays real harvested object ids across owner, error-template, decoy and anonymous controls. BFLA runs an explicit {anon, low-priv, primary} role matrix and requires a rejected bogus-token control cell — a finding is a proven monotonicity violation, never “anon got a 200.”

4 · Honest confidence

Every finding is Tentative or Firm. Observational signals stay Tentative; Firm requires corroboration — e.g. a page-size knob that both moves the element count and returns a 2xx, or latency that amplifies and repeat-confirms. Cached responses and 400/422 errors are discounted.

5 · Passive + active, auth-aware

Passive checks read traffic Ryft already captured (zero extra requests); active checks probe through a rate-limited sender that honours a cooperative stop. Multiple identities power the cross-user authorization tests, and the whole run respects your engagement scope.

6 · Non-destructive by default

Intrusive probes — property write-backs, credential spraying, batch amplification, verb tampering — sit behind an explicit --aggressive gate. Writes are snapshot-then-restored, and irreversible money / order / transfer commits are never driven, even aggressively.

7 · Blind vulns via OAST

SSRF, JWT jku/x5u header injection and unsafe third-party consumption point at your own out-of-band host and correlate a unique nonce to prove a blind interaction. With no OAST host configured they skip cleanly rather than guess.

8 · Mapped to the frameworks you report in

Every check carries its OWASP slot, a CWE id, and a MITRE technique — ATT&CK for the HTTP/API surface, MITRE ATLAS for the LLM surface. Findings export to HTML, Markdown, JSON, SARIF and PDF, so they drop straight into your existing reporting.

The catalog

Every check Ryft runs

All 46 checks, grouped the way the scanner organises them. Each one shows its OWASP category, CWE, MITRE technique, severity, and whether it runs passively or actively.

Injection 7

OS Command Injection

critical

Injects shell metacharacter payloads and confirms execution via a command-output oracle (id/passwd/win.ini) or a time-based delay.

API10:2023 CWE-78 Active T1190

Injection (SQL error + reflection)

high

Injects SQLi and XSS payloads into parameters and detects SQL error signatures and unencoded reflection.

API10:2023 CWE-89 Active T1190

LDAP Injection

high

Injects LDAP filter metacharacters into parameters/body fields and detects LDAP library/filter errors indicating injection.

API10:2023 CWE-90 Active T1190

NoSQL Injection

high

Injects NoSQL query operators ($ne/$gt/$regex) into parameters and body fields and detects driver errors or auth-bypass behaviour.

API10:2023 CWE-943 Active T1190

Path Traversal / Local File Inclusion

high

Injects ../ traversal sequences into parameters/body fields and confirms file disclosure via a file-content marker oracle.

API10:2023 CWE-22 Active T1190

Server-Side Template Injection (SSTI)

high

Injects template expressions into parameters/body fields and confirms server-side evaluation with an arithmetic oracle, then fingerprints the engine and escalates to code execution.

API10:2023 CWE-1336 Active T1190

XML External Entity (XXE)

high

Submits an XML document declaring an external entity and detects file disclosure (file:///etc/passwd or win.ini) in the response.

API8:2023 CWE-611 Active T1190

Access Control & Permissions 4

Broken Function Level Authorization (BFLA)

high

Runs an explicit {anon, low-priv, primary} role matrix and proves a monotonicity violation (a lower identity reaching an admin function) with a rejected bogus-token control — never 'anon got 200'. Verb/method-override tampering is aggressive-gated.

API5:2023 CWE-285 Active T1068

Broken Object Level Authorization (BOLA/IDOR)

high

Proves cross-identity object access with real harvested ids and the similarity oracle (same-object vs authz-error vs not-found vs different-object) against owner, error-template, decoy and anon controls — across path/query/body/header/cookie carriers.

API1:2023 CWE-639 Active T1190T1068

Mass Assignment / BOPLA

high

Learns the object shape, injects privileged / readOnly / sensitive properties, and proves each with an ECHO-DIFF read-back persistence oracle plus a canary negative control. Writes are aggressive-gated and snapshot-then-restored.

API3:2023 CWE-915 Active T1068

Excessive Data Exposure (BOPLA)

medium

Flattens JSON responses to key-paths and flags sensitive-name, third-party and spec-undeclared properties, confirmed with list-vs-detail and anon-vs-owner differentials; empty/null/masked values and the caller's own ids are subtracted.

API3:2023 CWE-213 Active + Passive T1213

Authentication & Credentials 11

Default / weak credentials

critical

Tries a tiny curated default-credential set against identified login endpoints; a known-bad control is sent first and a hit must differ toward a concrete auth artifact. Gated behind config.aggressive.

API8:2023 CWE-1392 Active T1078

JWT Algorithm Confusion (RS/ES -> HS256)

critical

For asymmetric tokens, resolves the server's public key and re-signs with HS256 using each public-key byte representation as the HMAC secret, confirming acceptance against a rejecting control.

API2:2023 CWE-347 Active T1212

JWT Signature Bypass

critical

Forges unsigned (alg:none) and signature-stripped JWTs and tampers the payload under the original signature, confirming acceptance against a rejecting random-signature control.

API2:2023 CWE-347 Active T1212

Authentication enforcement matrix

high

Compares an authenticated baseline against no-credential, bogus-bearer, empty-bearer and garbage-cookie identities using the similarity oracle to prove an endpoint serves protected content without valid authentication.

API2:2023 CWE-306 Active T1190

Credentials / tokens in the URL

high

Flags credentials, tokens, API keys or JWTs carried in the URL query string or userinfo, and (aggressive) confirms a header credential is still accepted as a query parameter.

API2:2023 CWE-598 Active + Passive T1552

Hardcoded secrets in client JS

high

Scans client JavaScript (captured, plus configured bundles in active mode) for hardcoded provider secrets, keys, tokens and private keys, gated by known formats and entropy.

API2:2023 CWE-615 Active + Passive T1552

JWT Weak HMAC Secret

high

Offline-cracks the HMAC signing secret against a large bundled wordlist (zero network, cannot false-positive); with aggressive mode, mints a token with the cracked secret and confirms the server honors it.

API2:2023 CWE-326 Active T1212

JWT kid / jku / x5u Header Injection

high

Exploits the 'kid' key-id as a path-traversal/SQLi sink to coerce a known signing key, and points 'jku'/'x5u' at an OAST host to detect SSRF to an attacker-controlled JWKS (confirmed by correlated callout).

API2:2023 CWE-347 Active T1212

JWT Claim Validation Gaps

medium

Once a signature weakness is confirmed (cracked HMAC secret or alg:none), mints single-claim deltas (expired exp, future nbf/iat, attacker aud/iss, sub/role tamper) to isolate which claim checks the server skips.

API2:2023 CWE-287 Active T1212

Login brute-force surface

medium

On a login endpoint identified from spec/flow/designation only, tests for missing rate-limiting / lockout / CAPTCHA / MFA and username enumeration using a bounded synthetic-credential burst.

API2:2023 CWE-307 Active T1110

Token entropy, rotation & revocation

medium

Measures session-identifier entropy offline and, with a login flow in aggressive mode, verifies sessions are invalidated on logout / refresh via the rate-limited flow runner.

API2:2023 CWE-613 Active + Passive T1212

Server-Side / SSRF 1

Server-Side Request Forgery (SSRF)

high

Points URL-like query params, nested body fields and URL-ish headers at loopback (with filter-bypass encodings), cloud metadata (detect-only), file/gopher/dict schemes and a blind OAST host; confirms via a dead-host control differential and OAST token correlation.

API7:2023 CWE-918 Active T1552.005T1190

Resource Consumption / DoS 5

Unrestricted Resource Consumption (GraphQL cost/alias/depth)

medium

Amplifies a GraphQL endpoint with alias-duplication (<=50) and deep nesting (<=10) versus a __typename baseline; FIRM only when the server processes it without errors AND latency amplifies. Reuses introspection only as a corroborating signal.

API4:2023 CWE-770 Active T1499

Unrestricted Resource Consumption (absent rate control)

medium

Looks for any request-rate control (RateLimit-*/Retry-After/429/503/509). Observational by default; under --aggressive a bounded clean 2xx burst corroborates the absence, with CDN cache-replay downgrade and latency-degradation as a secondary signal.

API4:2023 CWE-770 Active T1499

Unrestricted Resource Consumption (batch/array amplification)

medium

Wraps a single request into K bounded copies (array / JSON-RPC / GraphQL batch) with per-element canaries and proves the server PROCESSED K units of work. Aggressive-only; 413/400/422 suppress; irreversible money/order/transfer endpoints are deferred (API6).

API4:2023 CWE-770 Active T1499

Unrestricted Resource Consumption (expensive-op timing)

medium

Builds a median+MAD latency baseline, then injects heavy filter/search/expand/range values and flags only on a robust +absolute+relative threshold with a mandatory repeat-confirm. Fast 400/422 errors and cached responses are discounted.

API4:2023 CWE-770 Active T1499

Unrestricted Resource Consumption (missing page-size cap)

medium

Proves a page-size knob is uncapped: an absurd limit (100000) both moves the returned element count versus limit=1 AND is honoured with a 2xx, corroborated by body-size scaling. Suppressed on 400/422/413.

API4:2023 CWE-770 Active T1499

Security Misconfiguration 6

CORS Misconfiguration

high

Detects reflected / null / wildcard-with-credentials CORS and trust-boundary bypasses (prefix/suffix/subdomain/scheme-downgrade) plus pre-flight method/header widening; credentialed reflection is HIGH/CRITICAL.

API8:2023 CWE-942 Active + Passive T1592

Exposed debug / config endpoints

high

Probes a curated set of debug/config/metrics endpoints, each with a content signature, gated by the per-origin not-found baseline to beat SPA catch-all 200s; CRITICAL when secrets leak.

API8:2023 CWE-200 Active T1592T1213

Dangerous HTTP methods enabled

medium

Enumerates advertised methods via OPTIONS and confirms TRACE via an echoed marker (XST). Reports configuration only; authorization impact is left to the BFLA check.

API8:2023 CWE-650 Active T1592

Verbose error / stack-trace disclosure

medium

Flags SQL errors, stack traces, framework banners, filesystem paths and internal IPs leaked in responses; actively (non-destructively) provokes errors and only reports signatures absent from a clean baseline.

API8:2023 CWE-209 Active + Passive T1592

Missing / weak security headers

low

Grades security headers per response (HSTS max-age, nosniff, CSP, frame/referrer), content-type aware so JSON APIs are not asked for render-only headers; error responses are graded too.

API8:2023 CWE-693 Active + Passive T1592

Server / framework version banner disclosure

low

Passively parses Server / X-Powered-By / X-AspNet-Version / X-Runtime headers for a concrete product+version to seed version-specific CVE lookups downstream.

API8:2023 CWE-200 Passive T1592

Inventory & Discovery 3

API version sprawl (older/weaker versions live)

medium

Discovers sibling API versions (/v1,/v2,/internal,/beta,/legacy) and proves the value-add weakness differential — an old version accepting anonymous access where the current one requires auth — de-duping identical-backend aliases by body hash.

API9:2023 CWE-1059 Active T1595T1596

Exposed API documentation / schema

medium

Probes Swagger/OpenAPI/GraphQL documentation paths and confirms the body actually parses as a spec (importers.detect; GraphQL __schema) before reporting — a published dev portal is downgraded to INFO.

API9:2023 CWE-200 Active T1595

Non-production environment sprawl (dev/staging hosts live)

medium

Synthesizes sibling env hostnames (dev./staging./qa./uat.), requires them to resolve and serve an API-shaped body (not a parked page), and reports the weakness differential vs prod — suppressing same-body CDN aliases and honouring explicit scope denials.

API9:2023 CWE-1059 Active T1595

Business-Logic Flows 1

Unrestricted Access to Sensitive Business Flow (missing anti-automation)

high

Classifies sensitive state-changing flows (signup/login/reset/coupon/invite/add-to-cart/checkout/transfer) and detects the ABSENCE of anti-automation (CAPTCHA / step-up / 429 / rising friction). Observational (TENTATIVE) by default; under --aggressive a bounded distinct-input replay proves it FIRM. The irreversible money/order/transfer COMMIT is never driven, even aggressively.

API6:2023 CWE-799 Active T1499

Unsafe Consumption 1

Unsafe Consumption of Integrated / Third-Party APIs

high

Finds consumed-URL params (webhook/callback/discovery/import/avatar fetchers) and points one at the operator's own OAST host with a unique nonce. Proves the server blindly consumes the upstream via an OAST interaction correlated to that nonce, reflection of the nonce in the server's own response (upstream-data trust), or a plaintext callback where TLS was offered (no pinning). OAST-correlated only — the whole check INFO-skips when no OAST host is configured.

API10:2023 CWE-918 Active T1195

Data Exposure 1

Sensitive Data Exposure

high

Passively scans response bodies for PII and secrets (SSNs, cards, keys, tokens, password fields).

API3:2023 CWE-200 Passive T1213

LLM & AI endpoints 6

LLM Insecure Output Handling

high

Coaxes the model to emit active markup and flags when the API reflects LLM output unsanitized into an HTML/JS sink (XSS/SSRF).

OWASP LLM Top 10 CWE-79 Active AML.T0050

LLM Jailbreak / Guardrail Bypass

high

Sends guardrail-bypass templates (DAN / developer-mode / persona-split) and flags responses that emit bypass-confirmation signals.

OWASP LLM Top 10 CWE-1427 Active AML.T0054

LLM Prompt Injection (direct)

high

Detects LLM-backed endpoints (text/prompt field or chat body) and injects a unique canary token with an instruction to echo it; a reflected canary proves the injected instruction ran.

OWASP LLM Top 10 CWE-1427 Active AML.T0051

LLM Sensitive Information Disclosure

high

Coaxes the model to reveal secrets/PII from its context and flags responses that contain credential or PII patterns not present in the probe.

OWASP LLM Top 10 CWE-200 Active AML.T0057

LLM Indirect (Stored) Prompt Injection

medium

Stores indirect-injection markers in user-supplied text an LLM likely reprocesses; flags when the marker is persisted/reflected, creating a second-order injection sink.

OWASP LLM Top 10 CWE-1427 Active AML.T0051

LLM System Prompt Leakage

medium

Sends extraction probes that ask the model to reveal its system/developer prompt and flags responses that contain system-prompt-like leak markers.

OWASP LLM Top 10 CWE-200 Active AML.T0056

See it against a real API

Every screenshot on the demo page is a real scan — the honest severity breakdown, the evidence behind each finding, and the live map Ryft builds of the target.

Ryft is an authorized security-testing tool. Only test systems you own or have explicit written permission to assess.