AI-Guided DAST · Context-Aware SAST

GGSec Cortex

Find real vulnerabilities. Prove them. Fix them.

A hybrid application-security scanner that reads your source with AI, then confirms every finding against your running application with hard evidence — so your team spends time on real risks, not on triaging false positives.

Vulnerability Classes

35+

Findings Confirmed With Live Proof

DAST

Report-Ready In

Minutes
Watch it work

See GGSec Cortex in action

Two short technology demos — a full scan from source to live-proven finding, and a deep dive into one of the toughest classes to detect: client-side request desynchronisation.

Full walkthrough

AI-guided SAST, DAST & live verification

How Cortex reads your source, runs the scan and confirms each finding against the running application with hard evidence.

Technology deep dive

Client-Side Desync (CSD) detection

Proving an HTTP desynchronisation flaw (CWE-444) end to end — the parser disagreement made visible, not a wall of raw bytes.

Why GGSec Cortex is different

Severity you can trust — not "everything is 9.8 Critical"

Most scanners flood you with pattern matches. Cortex reads the code like an analyst, proves what is exploitable against the live app, and scores it honestly.

🧠

AI that understands your code

It follows data from input to sink and recognises framework protections — global output-encoding, token-based CSRF, whitelist validation — so it flags what is genuinely exploitable, not every string that looks dangerous. A call-graph reachability pass then drops sinks no entry point can actually reach.

🔬

Proof, not guesswork

Every dynamic finding is confirmed with tangible evidence: out-of-band callbacks, response reflections with byte offsets, timing signals, command output — even reading a real value out of the database to prove a blind SQL injection. If it can't be proven, it is clearly labelled as such.

⚖️

Certainty- & context-adjusted CVSS

An admin-only, unconfirmed issue is not reported at the same level as a proven, internet-facing one. Confirmed desync ranks above a likely parser anomaly — evidence drives the score.

📄

Report-ready in minutes

Executive summary, attack graph, 5×5 risk matrix, per-finding proof-of-concept, remediation plan with SLAs and compliance mapping — output your clients and auditors can read without a security degree.

Advanced capabilities

Where Cortex goes beyond a checklist scanner

High-end techniques normally reserved for manual penetration testing — automated, evidence-graded, and safe to run.

ggsec-cortex — HTTP Request Smuggling engine (evidence-tiered output)
[smuggle] Negative controls: 5/5 clean (CL-only, TE-only, Connection:close, no-marker — did not desync) [CONFIRMED] REQUEST_SMUGGLING CL.TE CVSS 8.9 CWE-444 Certainty: Confirmed · timing-differential desync · baseline 7ms → attack 6002ms (Δ 5995ms) [CONFIRMED] REQUEST_SMUGGLING TE.CL CVSS 8.9 CWE-444 Certainty: Confirmed · timing-differential desync · Δ 5183ms [CONFIRMED] REQUEST_SMUGGLING H2.TE CVSS 8.9 CWE-444 Certainty: Confirmed · HTTP/2 → HTTP/1.1 downgrade desync · timing-differential Δ 7960ms [LIKELY] REQUEST_SMUGGLING 0.CL (3 accepted variants) CVSS 4.6 CWE-444 Certainty: Likely · marker-leak / parser-differential — manual verification advised [LIKELY] REQUEST_SMUGGLING TE.TE (3 accepted variants) CVSS 4.6 CWE-444 → 3 confirmed desyncs (incl. HTTP/2), 4 likely signals — honest tiers, not 7× "Critical".

Real output. Genuine front-end/back-end desyncs are proven with a multi-second timing hang and reported as Critical; weaker parser anomalies drop to a "Likely / verify" tier at a lower score. A per-scan negative-control set proves the engine isn't crying wolf.

🧬

Native HTTP request-smuggling / desync engine

A raw-socket module that emits the ambiguous framing normal clients can't — CL.TE, TE.CL, TE.TE and CL.0 / 0.CL, including the 2025 Expect: 100-continue–triggered variant — each confirmed by a timing-differential signal. The HTTP/1.1 foundation the HTTP/2 downgrade family (below) builds on.

🪱

Client-side / CRLF-powered desync

The 2025 class of browser-weaponizable HTTP desync — a CRLF injected from the request path into the upstream request (the nginx $uri footgun). Cortex grades it on an honest evidence ladder: header injection → smuggled 2nd request → response-queue poisoning. It only claims the top severity once a victim request is actually served an attacker-controlled response — reproduced in a real headless browser — and a race-free dangling-byte variant makes exploitation deterministic.

🔗

Connection-state desync

The stateful cousin of request smuggling — no malformed framing required. Cortex proves first-request validation bypass (a front-end that access-controls only the first request on a keep-alive connection, then forwards the rest unchecked to the back-end) and connection-locked routing (a bogus / internal Host reaching the back-end the first request pinned) with a crisp fresh-vs-reused differential that reproduces 2/2 — and stays silent on a compliant server (CWE-444, PortSwigger Browser-Powered Desync).

🚂

HTTP/2 DoS posture

Safe, passive exposure check for the modern HTTP/2 resource-exhaustion classes — Rapid Reset (CVE-2023-44487) and CONTINUATION flood (CVE-2024-27316). Cortex negotiates HTTP/2 (h2c or h2-over-TLS) and reads the server’s SETTINGS frame: an unbounded MAX_CONCURRENT_STREAMS or an unadvertised MAX_HEADER_LIST_SIZE is surfaced as the exposure surface — without ever flooding the target (the DoS is volume-based and unsafe to prove), so it is scored an honest Low and confirmed by version→CVE.

🧪

Self-directed desync discovery

A generate → replay → learn loop mutates thousands of raw framing variants — obfuscated Transfer-Encoding, duplicate Content-Length, Content-Length & chunk-size value tricks (leading zeros, hex, sign, whitespace), chunk extensions, exotic line endings, dangling bodies — replays them over a raw socket, and feeds the ones that break the parser back into itself, surfacing novel parser-differentials no static payload list contains.

⏱️

Single-packet race / TOCTOU

Last-byte-synchronised single-packet delivery lands concurrent requests inside a ~1 ms window to surface sub-millisecond race conditions that burst-based tools miss.

📡

Out-of-band confirmation & cloud escalation

A built-in collaborator proves blind SSRF, XXE and object-injection by capturing the callback the target makes back to us — or, when no callback returns (egress-filtered), a redirect-loop confirms the blind request from its in-band symptom alone. A confirmed SSRF is then walked into cloud metadata (AWS IMDS) to demonstrate live credential theft.

🗝️

ORM leak — hidden-column exfiltration

The 2025 class modern query builders (Prisma, ActiveRecord, Sequelize, Django) expose: a user-controlled filter object reaches the ORM where clause, so columns that are never returned — passwords, tokens, PII — become a boolean oracle. Cortex confirms the operator injection against a matched control, then extracts the hidden value character-by-character (CWE-943) — now also across related models (relationship traversal) and filters delivered in the query string, a JSON body or GraphQL where-args — a data-exfiltration class general-purpose scanners don't test for.

🎫

Modern identity-layer attacks — JWT & OAuth

Beyond alg=none: Cortex forges tokens with an attacker key smuggled in the header itself — jwk (embedded key) and jku (a key set hosted on our collaborator) — plus RS256→HS256 confusion and kid path-traversal. On the OAuth 2.0 / OIDC flow it drives the real authorize→token exchange to prove redirect_uri validation bypass (the authorization code is redirected to attacker infrastructure), PKCE downgrade, authorization-code replay, scope-upgrade, missing-state / CSRF and mix-up (iss) confusion (RFC 9207) — the account-takeover primitives auditors ask about (CWE-347 / 601 / 269 / 352 / 346).

New in 1.3🏢

Enterprise SSO — SAML · OIDC · SCIM

The federation attacks that take the whole tenant, not one account. SAML signature-wrapping (XSW) — the IdP signs a user assertion but the SP consumes a forged admin one wrapped beside it; SAML XXE via the SAMLResponse (file read / blind OOB); OIDC audience-confusion — a validly-signed token minted for a different client is accepted; and SCIM anonymous provisioning that mints an admin with an unauthenticated POST /scim/v2/Users. Each is proven with a differential oracle — the forged identity is accepted and a broken-signature control is rejected — so a compliant IdP stays at zero findings (CWE-347 / 611 / 287 / 306).

New in 1.4🔀

HTTP/2 smuggling & complete desync coverage

The complete request-smuggling surface — matching what the leading specialist smuggling scanners test, and going past them. New in 1.4: the whole HTTP/2 downgrade family — pseudo-header injection (:method / :path / :scheme / :authority), fake & duplicate pseudo-headers, and H2.TE / H2.CL tunnelling — real ALPN-h2 frames + HPACK, not a library shortcut — plus a header-removal parser-discrepancy scan. Each is proven differentially: a benign follow-up on the same connection is served the smuggled response. On top of the classes those tools don't have (client-side desync, connection-state, the HttpOnly worm), it's the deepest smuggling engine in a single tool (CWE-444).

🧊

Advanced web-cache poisoning

A value reflected from an unkeyed input — a forwarding header (X-Forwarded-Host and ten more), a cloaked query parameter the cache omits from its key, or a fat-GET request body — is primed into a shared cache entry, then served to every later visitor. Cortex confirms it end-to-end: poison, re-fetch the same key with a clean request, and prove the marker survives as a cache HIT (CWE-349).

🕸️

Second-order & chained exploitation

Stored/second-order XSS and SSTI (store → render), plus an attack graph that chains individual findings into realistic end-to-end paths an attacker would actually walk.

🛡️

Prompt-injection-hardened AI

The source-reading AI is defended against instructions hidden inside the code it analyses — so a malicious comment can't steer the scanner. Security tooling that is itself secure.

🤖

Agentic & LLM prompt-injection testing

Tests the AI features in your application: Cortex proves excessive agency when an agent follows instructions hidden in fetched content and invokes a privileged tool the user never asked for — the OWASP LLM Top-10 risk classic scanners can't see.

🎣

Indirect (2nd-order) prompt injection

The RAG risk: attacker content stored in a note, document or profile is later pulled into another user's model prompt. Cortex plants a poisoned record, triggers the summary, and confirms it out-of-band — the injected instruction makes the model fetch an attacker URL, landing a real callback on our collaborator (data exfiltration / SSRF-via-LLM), not merely a reflected flag (OWASP LLM01 / CWE-1427).

🔭

Live CVE intelligence + EPSS

Real-time CVE feeds and exploit-prediction scoring push what attackers are most likely to weaponise to the top of the queue — beyond a static vulnerability database.

🧮

Metamorphic business-logic engine

Beyond injection: Cortex mutates price, quantity and discount inputs (negative amounts, >100% discounts, integer overflow) and checks a server-side invariant — a total that can never go below zero. When the maths breaks it is proven financial fraud with no payload at all — the class that costs real money.

🖥️

Real-browser proof (headless Playwright)

Where it matters, Cortex confirms a finding in an actual browser: DOM-based XSS is fired and observed in headless Chrome/Edge, and a client-side desync worm is reproduced end-to-end — HttpOnly session-cookie theft the JavaScript console itself can't read — so the proof is the exploit, not a heuristic.

Grey-box · IAST

Proof from inside your application — without handing over the code

Classic DAST sees only input and output. IAST (Interactive AST) is an optional grey-box sensor that runs on your server and, during a Cortex scan, confirms a finding with the exact file:line and the real query that reached the sink — so your source never leaves your infrastructure.

ggsec-cortex — IAST on-target confirmation (--iast)
# DAST alone — input/output only [LIKELY] SQL_INJECTION param=id response-differential location in code: unknown # DAST + IAST — the on-target sensor answers on the SAME response [CONFIRMED] SQL_INJECTION param=id server-side proof sink: mysqli_query @ admin.php:42 query: SELECT * FROM users WHERE id='1' OR '1'='1' → tainted: payload bytes reached the sink · no source uploaded

One line to install (auto_prepend_file), off by default, active only for HMAC-signed scan requests — the sensor never sees real user traffic. A DAST Likely becomes Confirmed at a precise file:line, and a blind sink the sensor observes tainted-reach is promoted to Confirmed — without the client uploading any source.

📍

file:line, not guesswork

A dynamic Likely becomes Confirmed at admin.php:42, with the exact argument that reached the query. Triage drops from hours to seconds.

🔒

Zero source upload

The sensor runs on your host; only sink events return to the operator — never code, never user data. Confidentiality and compliance stay entirely on your side.

🛰️

One-line install, off by default

A single auto_prepend_file entry. Active only for requests carrying a valid per-scan HMAC signature; sink events ride back inline on the same response — no second request, no temp files. Clean uninstall: remove the line.

🔎

Fewer false positives

An event is marked tainted only when the payload bytes actually reach the sink, so promoting a blind case to Confirmed takes hard server-side proof — not a heuristic. Sink families are matched, so SQLi proof never attaches to a file-read finding.

New in 1.4 · Request smuggling

Every request-smuggling technique the specialist tools test — and a picture your client understands

Request smuggling (HTTP desync, CWE-444) is where a front-end and a back-end disagree on where one request ends, so an attacker prepends bytes to the next visitor's request. 1.4 completes the surface — the full HTTP/2 pseudo-header family and a header-removal discrepancy scan — and adds a Visual Debugger view that draws the parser disagreement, so the finding is explainable in one glance, not a wall of raw bytes.

ggsec-cortex — Visual Debugger · Smuggler tab
# One request on the wire — two servers frame it differently FRONT-END frames by Content-Length → sees 1 request BACK-END frames by Transfer-Encoding → sees 2 requests POST / HTTP/1.1 Transfer-Encoding: chunked ← back-end stops here (0-chunk) 0 ⏷ SMUGGLED as a 2nd request (invisible to the front-end): GET /admin HTTP/1.1 # a benign follow-up from the next visitor is served the smuggled response [CONFIRMED] REQUEST_SMUGGLING follow-up served /admin CWE-444 → also over HTTP/2: :path / :method / :scheme injection · H2.TE / H2.CL tunnelling

The same tab takes a hand-pasted raw request and sends it verbatim over a raw socket (no normalisation) — a raw-request Repeater for desync — while the split diagram makes the impact obvious to a non-specialist audience.

🔻

HTTP/2 downgrade family

The full HTTP/2 smuggling set, in pure managed code: pseudo-header injection (:method / :path / :scheme / :authority), fake & duplicate pseudo-headers, and H2.TE / H2.CL tunnelling — over a real ALPN-h2 TLS connection against a naive H2→HTTP/1.1 downgrade.

Header-removal discrepancy

Removes each framing header (Transfer-Encoding / Content-Length / Connection / Host) in turn and diffs the raw response against a baseline. A reproducible change means the two hops parse framing differently — a smuggling precursor, flagged before it's weaponised.

👁️

See the desync, don't read it

The Visual Debugger “Smuggler” tab renders one wire as two conflicting framings — front-end sees one request, back-end sees two — with the smuggled request highlighted. The kind of proof a client signs off on.

🏁

Full parity — and beyond

Parser-discrepancy, CL.0, client-side / pause-based / connection-state / chunk-size, the HTTP/2 family and header removal — the complete request-smuggling surface the specialist scanners cover. Plus classes they lack: the client-side-desync worm, OOB routing-confusion and an autonomous desync-discovery loop.

Experimental🛰️

HTTP/3 downgrade smuggling

The frontier: the pseudo-header family carried one protocol up, over a real ALPN-h3 QUIC connection with hand-crafted QPACK:method / :path / :scheme / :authority injection, plus raw-QPACK anomalies a byte inspector can't see: a CR/LF hidden inside a Huffman-encoded :path, or smuggled through a dynamic-table insert on the QPACK encoder stream. A QPACK-tolerance probe additionally flags a decoder that accepts malformed field sections a compliant one must reject (QPACK_DECOMPRESSION_FAILED) — the precondition for an H3→HTTP/1.1 downgrade desync. Proven differentially against a controlled H3 front-end and single-steppable in the Visual Debugger (CWE-444).

Full coverage

35+ vulnerability classes, one scan

From classic injection to modern desync, business-logic abuse and supply-chain risk — SAST reads the code, DAST proves it on the running application.

💉

Injection

  • SQL & NoSQL injection
  • GraphQL injection, introspection & alias-batching abuse (rate-limit bypass)
  • Cross-Site Scripting (reflected & stored)
  • OS / command & code injection
  • Server-Side Template Injection
  • XML External Entities (XXE)
  • Archive extraction path traversal (Zip Slip → file write / RCE)
  • LDAP · CRLF / response-splitting
  • Prototype pollution
  • HTTP Parameter Pollution — duplicate/array-param type confusion
  • Insecure deserialization — PHP object injection, Ruby Marshal/YAML, Java (URLDNS gadget, out-of-band DNS-confirmed) & .NET (BinaryFormatter / ViewState) gadget chains — passive magic-byte detection plus active proof with a benign canary (CWE-502)
  • ORM leak — filter-operator injection into the ORM where-clause → boolean-oracle exfiltration of hidden columns, incl. relationship traversal and JSON / GraphQL filters (CWE-943)
🔑

Auth, session & access

  • JWT attacks — alg=none, kid path-traversal, RS256→HS256 alg-confusion, jwk / jku header-key injection (attacker-supplied signing key)
  • OAuth 2.0 / OIDC flow attacks — redirect_uri validation bypass (auth-code interception), PKCE downgrade, authorization-code replay, scope-upgrade, missing-state / CSRF, mix-up (iss) confusion — account takeover
  • Enterprise SSO / federation — SAML signature-wrapping (XSW) & XXE, OIDC audience-confusion, SCIM anonymous admin-provisioning (CWE-347 / 611 / 287 / 306)
  • Predictable / hardcoded-secret-derived tokens (password-reset, session)
  • IDOR — incl. behind authentication
  • GraphQL BOLA — object/field-level authorization missing (anonymous data read)
  • Authentication bypass
  • Weak / default credentials & password spraying — Basic-auth & form-login guessing, custom wordlist, lockout-aware (CWE-1392)
  • CSRF & session fixation
  • Race conditions (TOCTOU)
  • Broken function-level authorization
  • Business-logic abuse — negative quantity, out-of-range discount, price tampering
  • Workflow / state-machine bypass — skipping a required step (e.g. confirm an order without paying)
  • Mass assignment — privileged-field over-binding (read-back-confirmed)
  • Spoofable proxy-header trust — X-Forwarded-For / X-Real-IP access bypass
🌐

Client, transport & cache

  • Open redirect · JSONP leakage
  • CORS misconfiguration
  • Host-header injection
  • HTTP request smuggling & client-side / CRLF-powered desync — response-queue poisoning, browser-weaponizable (CWE-444)
  • Cleartext credential transport — login over HTTP (CWE-319)
  • Insecure cookie flags — missing HttpOnly / Secure / SameSite
  • Web-cache deception & poisoning — unkeyed header, parameter cloaking & fat-GET vectors · cacheable secrets
  • Server-Side Request Forgery — incl. redirect-loop confirmation (blind SSRF with no out-of-band callback) + cloud-metadata (IMDS) escalation
  • Unsafe upstream/partner-API consumption — untrusted response rendered as HTML (XSS)
  • TLS/SSL hygiene (weak ciphers, HSTS, certs)
  • WebSocket security (CSWSH, XSS-over-WS)
  • HTTP/3 (QUIC): discovery & WAF-bypass over H3 · downgrade-smuggling & QPACK-tolerance probe (experimental)
📦

Data, secrets & components

  • Hard-coded secrets & API keys (masked) — incl. secrets removed from the working tree but recoverable from git history (CWE-798)
  • Personal-data (PII) exposure
  • Plaintext / unhashed password storage
  • Verbose-error & exception leakage (stack traces, DB DSNs, key paths)
  • Known-CVE detection
  • Third-party dependency scanning (SCA)
  • Software supply-chain — dependency confusion, unpinned deps, install-script RCE
  • SBOM export (CycloneDX / SPDX)
  • OWASP API Security Top 10
From scan to sign-off

Client-ready reporting, compliance & CI/CD

📊

Enterprise reporting

Professional HTML & PDF in one normalized document — even across several targets/ports: executive summary, Methodology & Limitations, assessment scope, visual attack graph, 5×5 risk matrix, a Client Action Summary (P0/P1/P2) above a prioritised remediation plan (with SLAs), and per finding a reproducible proof-of-concept, evidence excerpt, an honest confidence tier (Confirmed / Primitive / Likely / Potential — no overclaiming), plain-language description and MITRE ATT&CK mapping. Advisory before/after fix diffs — your files are never modified. A unified engagement report can also merge several separate scans — SAST, DAST, desync — into a single client deliverable with a combined findings table and severity breakdown.

Built-in compliance mapping

Every finding maps to OWASP Top 10, PCI-DSS v4.0, ISO/IEC 27001:2022 and GDPR — ready for audit and client deliverables straight out of the scan.

⚙️

DevSecOps & CI/CD ready

SARIF 2.1.0 (GitHub Security tab), JUnit XML (Jenkins/GitLab), native DefectDojo import. Pipeline gate fails a build on chosen severity; baseline mode fails only on new issues; scan-to-scan diff tracks regressions. A zero-cost source gate — including secret scanning — runs in CI with no live target and no AI key.

Flexible, efficient, safe to run

🔐

Authenticated testing

Six ways in: session cookies, form login, HTTP Basic, header / bearer / API-key tokens, OAuth 2.0 client-credentials and mutual-TLS client certificates — with automatic CSRF-token & nonce handling. Define named identities (admin, customer, anonymous) and let Cortex replay findings across them to surface broken access control.

🎯

Scoped & polite

Rate-limiting — with adaptive back-off when the target pushes back (429/503) — plus host scoping and exclusions keep testing in-scope and gentle on production. Intrusive modules are opt-in and never run in a default preset.

🧩

Spec-driven & repeatable

Drive testing from an OpenAPI spec — or replay a proxy capture (XML / HAR export) straight into the engine; replay a previous plan for fast, free iteration. Efficient AI usage keeps large-codebase scans cost-controlled.

🚀

Fits your stack

Native application — scans source directories or single files, and probes live web apps over HTTP/S — or a whole list of hosts in one fleet run with a combined report. For internal AppSec teams, penetration testers and MSSPs producing client-ready reports.

SAST+DASTHybrid, one tool
4Compliance frameworks
$0Source gate in CI
v1.4GA · actively validated

See it on your own application

Request a demo or a pilot scan and get a client-ready report — proof, severity you can trust, and a prioritised fix plan.

For authorised security testing only. Always scan systems you own or have explicit permission to assess. · GG Advanced IT Security — ggsec.de