[ Features ]

What Hypervex catches, and how it proves it

OWASP Top 10 coverage

Every review maps findings to OWASP categories and CWE identifiers — stored as structured data, not prose. What each category looks like in real code:

A01

Broken Access Control

e.g. CWE-639

An API route that checks login but never checks ownership — any user reads any account's data by changing an ID.

A02

Cryptographic Failures

e.g. CWE-328

Passwords hashed with MD5, tokens signed with a hardcoded secret, PII stored in plaintext.

A03

Injection

e.g. CWE-89

SQL built with f-strings, shell commands assembled from user input, unsanitised HTML rendered into the DOM.

A04

Insecure Design

e.g. CWE-204

A password-reset flow that leaks whether an email exists, or rate limits that live only on the client.

A05

Security Misconfiguration

e.g. CWE-942

CORS set to *, debug mode reachable in production, default credentials in a compose file.

A06

Vulnerable Components

e.g. CWE-1104

A dependency pinned to a version with a known CVE, flagged when your usage is actually affected.

A07

Auth Failures

e.g. CWE-287

Session tokens that never expire, JWT verification with algorithm none, missing checks on privileged routes.

A08

Data Integrity Failures

e.g. CWE-502

Deserialising untrusted input with pickle, auto-updating from an unverified source.

A09

Logging Failures

e.g. CWE-532

Auth failures that are never logged — or secrets and PII written into logs.

A10

SSRF

e.g. CWE-918

A URL fetched server-side from user input — reaching internal metadata endpoints your firewall can't see.

[ The Trace ]

Assessment → traversal → synthesis

Most tools stop at "this looks vulnerable." For every critical or high finding with ≥80% confidence, Hypervex runs a second investigation pass — the Trace — that follows the code path and returns a verdict.

01 — Assessment

The Trace reads the finding and the diff. If the vulnerability is unambiguous from the diff alone, it verifies immediately. If exploitability depends on code elsewhere, it lists the exact files to examine.

02 — Traversal

It fetches those files at the PR's exact commit and follows the call chain — looking for the validation, auth check, or sanitisation that would block the exploit path.

03 — Synthesis

The evidence becomes a verdict: Trace verified (exploitable, with the call-chain proof) or Trace dismissed (a mitigation blocks it). The verdict posts with the finding, capped at 5 LLM calls by design.

[ Confidence ]

A confidence score you can triage by

Every finding carries a 0–100 confidence score as a first-class field, separate from severity. It changes how you spend your attention:

87%Definite · act now

High confidence means the exploit path is visible in the code: input reaches the sink, no mitigation in between — and at this level the Trace has usually verified it through the call chain. Block the merge and fix it.

34%Potential · review, don't block

Low confidence means the pattern is suspicious but exploitability depends on assumptions Hypervex couldn't confirm — caller behaviour, deployment config, data provenance. Read it, decide, merge.

[ Findings ]

Structured findings, not prose

This is what posts to your pull request — live component, not a screenshot. Severity, taxonomy, confidence, an exploit scenario in plain language, a fix in your codebase's own patterns, and the Trace verdict:

hypervex[bot]commented just now

⬡ HYPERVEX SECURITY REVIEW

Risk Score: 91/100 · 1 finding (1 critical)

CriticalA03:2021 — InjectionCWE-8994% confidence

SQL query in api/orders.py:42 interpolates user_id directly into the statement.

An attacker could pass 1 OR 1=1 to dump every order in the table — your checkout route passes this parameter straight from the query string.

Fix: use the parameterised db.execute() pattern already in lib/db.py:17.

Trace verified — confirmed by Hypervex Trace
Add to GitHub — free

Free for one repository · no credit card