Quant Sentinel
Automated penetration testing, powered by AI
Specialist AI agents orchestrated across adaptive pipelines. White-box, grey-box, or black-box testing for web applications, APIs, and network infrastructure — with exploitation proof for every finding.
Sample output
See what Sentinel delivers
Findings summary with proof statuses, detailed exploitation evidence, a deterministic findings roster, and per-CWE remediation — all generated automatically.
Security Assessment Report
app.acme-corp.com · 71 minutes · 12 unique findings
Quant Sentinel performed an automated security assessment of the ACME Corp web application, analysing both the running application and its source code repository. Of 12 unique findings: 10 were confirmed with machine-verified proof, 1 remains claimed (witness captured, not reproduced), and 1 was actively debunked with the rejecting response preserved — because you should trust the report in both directions.
Quant Sentinel — Security Assessment Report
Target: https://app.acme-corp.com Repository: ./acme-portal Date: 2026-07-28 Model: claude-opus-4.8 Duration: 71 minutes Total Cost: $61.40
Validation status: Findings marked CONFIRMED are reproduced live and machine-verified against captured evidence (a
proof_tokenmust appear verbatim in the captured response). Findings marked Claimed have concrete supporting detail but no proof-verified reproduction this run. Findings marked Unverified are theoretical or were actively disproven (false-positive verdicts with the reasoning recorded).
Findings Summary
| ID | Finding | Type | Severity | CVSS | Status | Reproduction |
|---|---|---|---|---|---|---|
| INJ-VULN-01 | SQL injection in search endpoint | injection | critical | 9.8 | Confirmed | proof-verified |
| SSRF-VULN-01 | Webhook handler fetches internal metadata | ssrf | critical | 9.1 | Confirmed | proof-verified |
| AUTHZ-VULN-02 | Admin settings API missing authorization | authz | critical | 9.1 | Confirmed | proof-verified |
| AUTH-VULN-01 | Session cookie is base64 of user id (forgeable) | auth | high | 8.1 | Confirmed | proof-verified |
| INJ-VULN-02 | Time-based blind SQLi in sort parameter | injection | high | 7.5 | Confirmed | proof-verified (OOB canary) |
| XSS-VULN-02 | Stored XSS in product reviews | xss | high | 7.3 | Confirmed | proof-verified |
| FILE-VULN-01 | SVG upload rendered inline (stored XSS) | file-upload | high | 7.1 | Confirmed | proof-verified |
| AUTHZ-VULN-01 | Order objects readable across users (BOLA) | authz | high | 7.1 | Confirmed | proof-verified |
| SSRF-VULN-02 | Image proxy resolves link-local hosts | ssrf | high | 7.1 | Claimed | witness captured |
| GQL-VULN-01 | GraphQL adminConfig query requires no auth | graphql | high | 7.5 | Confirmed | proof-verified |
| AUTH-VULN-02 | JWT accepted with alg: none | auth | high | 7.4 | Unverified | could not reproduce |
| XSS-VULN-01 | Reflected XSS in search page | xss | medium | 6.1 | Confirmed | proof-verified |
Total analyzed findings: 12 (12 unique after cross-queue dedup) — Confirmed: 10, Claimed: 1, Unverified: 1.
Confirmed Findings (proof-verified)
INJ-VULN-01: SQL Injection in Search Endpoint
| Field | Value |
|---|---|
| Severity | Critical |
| CVSS | 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| CWE | CWE-89: SQL Injection |
| Location | src/pages/api/search.ts:47 |
| Status | Confirmed — proof-verified |
| Evidence | injection_exploitation_evidence.md#inj-vuln-01 · injection_exploitation_evidence.json |
Description
The /api/search endpoint builds a PostgreSQL query via string interpolation of the user-supplied q parameter, passed to prisma.$queryRawUnsafe without parameterization.
Exploitation (deterministic confirmation)
GET /api/search?q=%27%20UNION%20SELECT%20version(),null,null--%20
→ 200 OK
response_excerpt: "PostgreSQL 16.2 on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit"
proof_token: PostgreSQL 16.2 ✓ verbatim in captured responseFILE-VULN-01: SVG Upload Rendered Inline (Stored XSS)
| Field | Value |
|---|---|
| Severity | High |
| CVSS | 7.1 (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N) |
| CWE | CWE-434: Unrestricted Upload of File with Dangerous Type |
| Location | studio.media-browser::uploadFile → GET /uploads/<name> |
| Status | Confirmed — proof-verified |
| Evidence | file_upload_exploitation_evidence.md#file-vuln-01 |
Exploitation
The upload path accepts .svg and the serve route returns it as Content-Type: image/svg+xml with no attachment disposition, executing inline <script> in the application origin. The agent’s canary SVG fetched an out-of-band callback URL when rendered — the callback interaction was recorded as proof.
INJ-VULN-02: Time-Based Blind SQLi in Sort Parameter
| Field | Value |
|---|---|
| Severity | High |
| CWE | CWE-89: SQL Injection |
| Location | /api/products?sort= |
| Status | Confirmed — proof-verified (out-of-band) |
No response-body signal exists for this injection. The agent minted an oob_interact canary, embedded it in a payload triggering an outbound lookup, and observed the target’s resolver contact the canary — converting a blind finding from “potential” to proof-verified via the recorded interaction.
Claimed Findings (witness captured, not reproduced this run)
SSRF-VULN-02: Image Proxy Resolves Link-Local Hosts
The image proxy fetches attacker-supplied URLs and resolves link-local/loopback addresses, but the response body is a generic error with no content. No out-of-band signal was observed this run; the agent recorded the resolver behavior as a witness and kept the finding at Claimed rather than upgrading without proof.
Unverified Findings (actively disproven)
AUTH-VULN-02: JWT Accepted with alg: none
Analysis flagged JWT validation as potentially accepting unsigned tokens. Live testing with forged alg: none tokens returned 401 token signature invalid on every attempt — the verifier enforces signature checks. Recorded as false-positive with the rejecting response preserved, so the claim is closed rather than left ambiguous.
Identified Findings Roster (all analyzed findings)
Every unique finding from the analysis phase, independent of whether exploitation confirmed it. The same issue reported by several queues is collapsed into one canonical row — the other ids are noted inline (“also reported as …”) so no finding is silently dropped.
| ID | Type | Severity | CVSS | CWE | Externally exploitable | Status | Evidence | Summary |
|---|---|---|---|---|---|---|---|---|
| INJ-VULN-01 | injection | critical | 9.8 | CWE-89 | yes | Confirmed | injection_exploitation_evidence.md#inj-vuln-01 | SQLi in search endpoint |
| SSRF-VULN-01 | ssrf | critical | 9.1 | CWE-918 | yes | Confirmed | ssrf_exploitation_evidence.md#ssrf-vuln-01 | Webhook fetches internal metadata |
| AUTHZ-VULN-02 (also reported as AUTHZ-VULN-03) | authz | critical | 9.1 | CWE-862 | yes | Confirmed | authz_exploitation_evidence.md#authz-vuln-02 | Admin settings API missing authorization |
| AUTH-VULN-01 | auth | high | 8.1 | CWE-330 | yes | Confirmed | auth_exploitation_evidence.md#auth-vuln-01 | Forgeable session cookie (base64 uid) |
| INJ-VULN-02 | injection | high | 7.5 | CWE-89 | yes | Confirmed | injection_exploitation_evidence.md#inj-vuln-02 | Time-based blind SQLi in sort param |
| GQL-VULN-01 | graphql | high | 7.5 | CWE-862 | yes | Confirmed | graphql_exploitation_evidence.md#gql-vuln-01 | adminConfig query requires no auth |
| XSS-VULN-02 | xss | high | 7.3 | CWE-79 | yes | Confirmed | xss_exploitation_evidence.md#xss-vuln-02 | Stored XSS in product reviews |
| FILE-VULN-01 | file-upload | high | 7.1 | CWE-434 | yes | Confirmed | file_upload_exploitation_evidence.md#file-vuln-01 | SVG upload rendered inline |
| AUTHZ-VULN-01 | authz | high | 7.1 | CWE-639 | yes | Confirmed | authz_exploitation_evidence.md#authz-vuln-01 | Order objects readable across users (BOLA) |
| SSRF-VULN-02 | ssrf | high | 7.1 | CWE-918 | yes | Claimed | — | Image proxy resolves link-local hosts |
| AUTH-VULN-02 | auth | high | 7.4 | CWE-347 | yes | Unverified | — | JWT alg: none — disproven live (401s) |
| XSS-VULN-01 | xss | medium | 6.1 | CWE-79 | yes | Confirmed | xss_exploitation_evidence.md#xss-vuln-01 | Reflected XSS in search page |
Total analyzed findings: 13 (12 unique after cross-queue dedup) — Confirmed: 10, Claimed: 1, Unverified: 1.
Remediation
CWE-89 — SQL Injection (INJ-VULN-01, INJ-VULN-02)
Use parameterized queries / prepared statements for every dynamic fragment — never string interpolation. With Prisma, replace $queryRawUnsafe with $queryRaw bindings or the query builder; where raw SQL is unavoidable, bind parameters explicitly.
Applies to: INJ-VULN-01, INJ-VULN-02
CWE-918 — SSRF (SSRF-VULN-01, SSRF-VULN-02)
Enforce an egress allowlist of permitted hosts/schemes; resolve and validate the destination IP before connecting; deny link-local, loopback, and RFC1918 ranges by default; require IMDSv2 on AWS so metadata responses need a session token.
Applies to: SSRF-VULN-01, SSRF-VULN-02
CWE-434 — Unrestricted File Upload (FILE-VULN-01)
Reject client-executable types (svg/html/xhtml) by content sniffing, not extension alone; store uploads outside the web root; serve with Content-Disposition: attachment and X-Content-Type-Options: nosniff for anything that isn’t a known-safe image type.
Applies to: FILE-VULN-01
CWE-862 — Missing Authorization (AUTHZ-VULN-02, GQL-VULN-01)
Enforce authorization checks at the handler and resolver level for every privileged operation — presence of a session is not authorization. Apply role checks uniformly across REST routes, GraphQL resolvers, and nested objects.
Applies to: AUTHZ-VULN-02, GQL-VULN-01
CWE-330 — Insufficient Randomness (AUTH-VULN-01)
Issue session tokens from a CSPRNG with at least 128 bits of entropy and verify integrity server-side (or use signed/encrypted tokens). Never derive sessions from user-controlled identifiers such as user ids.
Applies to: AUTH-VULN-01
Machine-readable export: findings.sarif (SARIF 2.1.0 — per-class rules, CWE mappings, partial fingerprints, and Confirmed/Claimed/Unverified status per result).
Five-phase pipeline, plus follow-through
Each assessment follows a structured pipeline that adapts to your target and testing mode — then keeps working what it finds.
Scoping
Analyses source code to identify attack surface, tech stack, and high-risk areas.
Pre-reconnaissance
Deep code analysis to find potential vulnerability patterns before live testing begins.
Reconnaissance
Browser-based mapping of the running application plus ffuf content discovery — any route recon misses is automatically re-tasked via coverage-gap repair.
Vulnerability + Exploitation
Parallel specialist agents analyse and exploit. Confirmation is deterministic: an exploited verdict requires machine-checkable proof captured from the target — no self-attested findings.
Discovery & Chaining
New vectors found mid-exploitation feed targeted second passes; won sessions and credentials feed chained privilege-escalation testing.
Reporting
Executive summary, detailed findings with CVSS scores, deterministic findings roster, and SARIF export for CI/CD integration.
Testing modes
Adapt to Any Engagement
Choose the testing mode that matches your access level. White-box adds deep source code analysis. Grey-box uses API specifications. Black-box relies entirely on dynamic testing — no source or spec required.
Pipeline adapts automatically to available information
- Safe mode skips exploitation for risk-averse scans
- Scoped analysis via source paths or URL rules
- Source code
- API spec
- Browser testing
- HTTP tools
- Source code
- API spec
- Browser testing
- HTTP tools
- Source code
- API spec
- Browser testing
- HTTP tools
Target types
Web Apps, APIs, or Both
Webapp agents use Playwright for browser-based testing. API agents use HTTP and GraphQL tools. Hybrid mode runs all vulnerability types in parallel — up to 12 specialist tracks covering both attack surfaces simultaneously, including a dedicated GraphQL track and file-upload analysis.
- Blind vulnerability confirmation via out-of-band (OOB) canary callbacks — blind SSRF, XXE, SSTI, and blind/stored XSS are proven, not just suspected
- ffuf content discovery finds unlinked endpoints crawlers miss
- REST, GraphQL, and WebSocket endpoint testing
- Raw HTTP control — binary bodies, duplicate headers, cookie jars, redirect chains
Configuration
Authenticate and Scope
Describe login flows in natural language. Support for form-based login, TOTP two-factor, OAuth2, and API keys. Define focus and exclusion rules to target specific areas of your application.
- Natural language login flow descriptions
- TOTP 2FA support built-in
- URL path and subdomain scoping rules
Automation
Security in Your Pipeline
Run Sentinel in CI/CD with —quiet mode. Export findings as SARIF 2.1.0 for integration with GitHub Security, GitLab SAST, and other scanning tools. Track costs per scan for budget management.
- SARIF 2.1.0 with OWASP and CWE mappings
- Ground-truth detection benchmarking — gate releases on recall and false-positive regression thresholds
- Docker image for containerised execution
- Per-agent cost tracking and session metrics
Reporting
Evidence, Not Assumptions
Confirmation is deterministic, not self-attested: an exploited verdict requires machine-readable proof captured from your target. Findings that can’t be proven are debunked with the same rigour — you get evidence both ways, never assumptions. Executive summaries for leadership, detailed technical findings for engineers.
- Proof-verified exploitation — every Confirmed finding is machine-checked against captured evidence
- False positives actively debunked with code-level proof, not silently dropped
- CVSS 3.1 scoring with CWE references
- Actionable remediation with code examples
Critical · CVSS 9.8 · proof-verified
SQL Injection in Search Endpoint
CWE-89 · src/pages/api/search.ts:47
WHERE name ILIKE ’%${req.query.q}%’`
Exploited: UNION SELECT version() returned PostgreSQL 16.2
Trust layer
A Report You Can Defend
AI-generated findings are worthless if you can’t trust them. Every layer of Sentinel’s output is machine-checked before it reaches you — so Confirmed means proven, and everything else is honestly labelled.
Deterministic confirmation — exploited verdicts require a proof token captured verbatim from your target
Anti-hallucination grounding — every code citation is verified against your repository; fabrications fail and retry
Honest negatives — findings that can’t be proven are debunked with the rejecting evidence preserved
Deduplicated, reconciled output — cross-queue findings merge with aliases kept; nothing drops silently
Infrastructure
Beyond the Application Layer
Scan your network infrastructure alongside your applications. Feed a list of IPs, domains, or CIDR ranges and Sentinel maps open ports, fingerprints services, analyses TLS configurations, and matches known CVEs — all in a single automated pipeline.
- Port scanning, service fingerprinting, and DNS subdomain discovery
- TLS/SSL analysis — weak ciphers, expired certs, protocol vulnerabilities
- CVE matching against 8,000+ vulnerability templates
- Technology detection — CDN, framework, server, and platform identification
- Automatic webapp candidate identification for follow-up application testing
Built for security teams
From manual pentest replacement to automated CI/CD security gates.
Security teams
Replace expensive manual penetration tests with automated assessments that run in hours, not weeks.
- Application and infrastructure coverage
- Proof-verified exploitation
- Executive and technical reports
DevSecOps
Shift-left security testing integrated directly into your development pipeline.
- SARIF export for CI/CD
- Quiet mode for headless runs
- Cost tracking per scan
Compliance and audit
Generate audit-ready reports with finding evidence, CVSS scores, and remediation guidance.
- CWE references
- CVSS 3.1 scoring
- Detailed remediation steps
Government
ISM aligned platform with Australian data sovereignty and local support.
- Australian owned and operated
- ISM aligned
- Local support team
Start your first automated pentest
Deploy Sentinel against your application and get a comprehensive security assessment in hours, not weeks.