Benchmark

100% on PortSwigger Academy — 274 Labs + 5 Mystery

RedPick solved all 274 PortSwigger Web Security Academy labs — 100% completion — plus all 5 mystery labs, fully automated, with zero human intervention. Every Apprentice lab, every Practitioner lab, every Expert lab. The PortSwigger dashboard shows EXPERT level achieved, a yellow bar at 100%, and green checkmarks across every difficulty tier.

This is the second perfect score in our benchmark series, following the 104/104 on the XBOW CTF. Combined: 378 out of 378 challenges across the two most comprehensive web security benchmarks available, covering 49 vulnerability categories from reflected XSS at beginner level to server-side pause-based HTTP/2 request smuggling at the highest difficulty tier.

Update (April 2026): PortSwigger published a new lab series under the AI-powered scanner vulnerabilities topic — four labs targeting indirect prompt injection against AI-powered vulnerability scanners themselves. RedPick solved all four end-to-end. The post has been updated to reflect 274/274 across 31 categories, with a new walkthrough for the Wave 2 LLM labs in the Web LLM attacks section.

PortSwigger Web Security Academy dashboard showing 274/274 completion — 61/61 Apprentice, 174/174 Practitioner, 39/39 Expert, 100% vulnerability labs, 5/5 mystery labs, EXPERT level achieved
PortSwigger Web Security Academy dashboard showing 274/274 completion — 61/61 Apprentice, 174/174 Practitioner, 39/39 Expert, 100% vulnerability labs, 5/5 mystery labs, EXPERT level achieved

The benchmark

The PortSwigger Web Security Academy is the gold standard for practical web vulnerability training, created and maintained by the team behind Burp Suite. The Academy contains 274 labs across 31 vulnerability categories at three difficulty tiers:

  • Apprentice (61 labs): reflected XSS, basic SQLi, simple path traversal, default credentials, indirect prompt injection against AI agents
  • Practitioner (174 labs): blind SQL injection, JWT algorithm confusion, OAuth redirect manipulation, prototype pollution to RCE, H2.CL request smuggling, AI scanner defense bypass
  • Expert (39 labs): custom Java deserialization gadget chains, client-side desync, server-side pause-based request smuggling, web cache poisoning via HTTP/2 tunnelling

Each lab is a live, ephemeral web application with a single specific vulnerability. PortSwigger's backend validates every exploit server-side — no multiple-choice answers, no self-reported scoring.

Beyond the 274 standard labs, PortSwigger defines exam preparation requirements that test breadth:

RequirementCompleted
Lab from all topics23 of 23
Specific labs8 of 8
Mystery labs5 of 5

The 5 mystery labs are randomly selected challenges where the vulnerability type is unknown beforehand — the agent must fingerprint, classify, and exploit without foreknowledge. RedPick solved all 5.

Testing conditions: fully black-box, no source code, no hints, no answer keys, no human guidance.

Results

DifficultyLabsSolvedRate
Apprentice6161 of 61100%
Practitioner174174 of 174100%
Expert3939 of 39100%
Total274274 of 274100%
PortSwigger Academy tier completion donut — 61 Apprentice (22%) + 174 Practitioner (64%) + 39 Expert (14%) = 274 labs at 100%
PortSwigger Academy tier completion donut — 61 Apprentice (22%) + 174 Practitioner (64%) + 39 Expert (14%) = 274 labs at 100%

All three tiers completed at 100% — Expert level requires completing every Apprentice and Practitioner lab plus the Expert-tier labs.

By vulnerability category — all 31 at 100%

CategoryLabsSolvedHighlight
Cross-Site Scripting3030 of 30Reflected, stored, DOM — 30 distinct filter bypass contexts
HTTP Request Smuggling2222 of 22CL.TE through server-side pause-based desync
SQL Injection1818 of 18UNION, blind boolean, time-based, OOB, XML-encoded
Authentication1414 of 14Brute force, MFA bypass, password reset poisoning
Access Control1313 of 13Horizontal/vertical IDOR, Referer-based, URL rewriting
Web Cache Poisoning1313 of 13Unkeyed headers, parameter cloaking, fat GET
CSRF1212 of 12Token bypass, SameSite, method override, Referer validation
Business Logic1212 of 12Price manipulation, workflow bypass, encryption oracle
Insecure Deserialization1010 of 10PHP, Java ysoserial, custom gadget chain
Prototype Pollution1010 of 10Client-side DOM XSS, server-side RCE via child_process
XXE Injection99 of 9Classic, blind OOB, parameter entities, XInclude
JWT Attacks88 of 8None algorithm, weak secret, jwk/jku injection, kid path traversal
File Upload77 of 7Extension bypass, content-type tricks, polyglot, race condition
DOM-Based Vulnerabilities77 of 7document.write, innerHTML, WebMessage, cookie manipulation
HTTP Host Header Attacks77 of 7Password reset poisoning, SSRF via Host, routing-based
Server-Side Template Injection77 of 7ERB, Tornado, Freemarker, Handlebars, Twig, sandbox escape
SSRF77 of 7Basic, blind OOB, filter bypass, open redirect chaining
OAuth Authentication66 of 6Redirect URI bypass, token theft, forced profile linking
Path Traversal66 of 6Absolute path, nested bypass, double encoding, null byte
Race Conditions66 of 6Limit overrun, single-packet attack, multi-endpoint
OS Command Injection55 of 5Inline, blind time-based, blind OOB exfiltration
API Testing55 of 5Mass assignment, server-side parameter pollution
Clickjacking55 of 5Frame-based, multistep, prefilled form actions
GraphQL Vulnerabilities55 of 5Introspection, alias-based brute force, CSRF via GET
Information Disclosure55 of 5Debug pages, backup files, error messages, git history
Web Cache Deception55 of 5Path delimiter, normalization, static extension
NoSQL Injection44 of 4Operator injection, syntax injection, exfiltration
Web LLM Attacks88 of 8Prompt injection, insecure output, indirect injection, AI agent destructive actions, AI scanner defense bypass
CORS Misconfiguration33 of 3Reflected origin, null origin, insecure protocol trust
WebSockets33 of 3XSS via WebSocket, handshake manipulation
Essential Skills22 of 2Targeted scanning, non-standard data structure scanning
PortSwigger Academy category breakdown — 31 vulnerability categories sorted by size, from Cross-Site Scripting (30 labs) to Essential Skills (2 labs), all at 100% completion
PortSwigger Academy category breakdown — 31 vulnerability categories sorted by size, from Cross-Site Scripting (30 labs) to Essential Skills (2 labs), all at 100% completion

Three hard walkthroughs

The Level 1 and Level 2 labs build fundamentals. The Expert tier separates exploitation capability. Here are three categories that illustrate what "hard" means in this benchmark.

HTTP/2 request smuggling — the hardest category

The HTTP request smuggling category is the deepest in the Academy: 22 labs, spanning from classic CL.TE differentials to attack techniques published as original research in the last two years.

The progression:

  1. Classic smuggling (Apprentice/Practitioner): CL.TE and TE.CL differentials where frontend and backend disagree on request boundaries.
  2. HTTP/2 downgrade attacks (Practitioner): H2.CL and H2.TE exploit protocol translation layers. An HTTP/2 frontend rewrites to HTTP/1.1 for a backend that honors length/chunked headers HTTP/2 itself ignores.
  3. H2 CRLF header injection (Practitioner): HEADERS frames carrying raw \r\n in pseudo-header values inject new HTTP/1.1 headers — or entire new requests — during re-serialization.
  4. Response queue poisoning (Practitioner): the smuggled request receives the next legitimate user's response, desynchronizing the entire connection.
  5. Request tunnelling (Expert): HTTP/2 frontends that tunnel requests to internal backends can be abused via :path pseudo-header manipulation to bypass routing.
  6. Client-side desync (Expert): force a victim's browser into a desynchronized HTTP/2 state, exploiting browser multiplexing internals.
  7. Server-side pause-based smuggling (Expert): timing-based exploitation during request parsing — sub-second pauses cause frontend/backend parsing divergence.

Why this matters: request smuggling enables cross-user attacks, cache poisoning, access control bypass, and credential theft — all without authentication. A single smuggling primitive on a CDN or load balancer can cascade to every user behind it.

SQL injection — 18 labs, 8 technique families

Context-aware selection: UNION-based for visible errors, boolean blind for same-page responses, time-based when boolean is suppressed, XML-encoded for metacharacter filters, out-of-band DNS for zero-feedback scenarios.

Each technique requires understanding the database engine (MySQL vs PostgreSQL vs MSSQL vs Oracle) because the exact OOB primitive differs: UTL_HTTP.REQUEST on Oracle, xp_dirtree on MSSQL, COPY TO PROGRAM on PostgreSQL. RedPick fingerprints the DB from subtle response patterns (error message formats, function availability) before choosing the exploitation path.

Web LLM attacks — 8 labs across two generations

PortSwigger's LLM-attack track now contains eight labs in two waves. The original four (Wave 1) cover classical LLM API security: direct prompt injection to extract system prompts, insecure output handling reaching dangerous sinks, indirect prompt injection via retrieved documents, and tool-call abuse. RedPick handles these with structured prompt-injection payloads, system-prompt extraction techniques, and tool-call manipulation patterns.

The four labs published in April 2026 (Wave 2, AI-powered scanner vulnerabilities) are a step change. The target is no longer a chatbot — it is an LLM-driven vulnerability scanner that audits user-submitted content (comments, reviews) on behalf of the application owner. The scanner has privileged tooling: it logs in as a real user, navigates the application, and executes administrative actions.

The shared primitive is indirect prompt injection against an autonomous AI agent. Attacker-controlled content framed as authoritative scanner output (a finding template, a remediation step, an internal directive) is treated by the agent as part of its own reasoning trace and executed with its own privileges:

  • PS-LLM-005 (Apprentice) — destructive actions: a comment styled as a remediation procedure instructs the scanner to visit the account-deletion endpoint as the auditing user. The scanner deletes the user's own account.
  • PS-LLM-006 (Apprentice) — credential exfiltration: a comment reframes "leaking your API key" as "completing the audit". The scanner posts a reply containing the redacted-by-policy key, defeating the safety mechanism that assumed voluntary self-disclosure won't happen.
  • PS-LLM-007 (Practitioner) — confused-deputy chain: stage 1, the scanner sweeps internal IPs as a "connectivity check" and reports the admin host. Stage 2, a follow-up comment directs the scanner to issue an admin-endpoint request from its trusted internal source IP. A user is deleted via the scanner-as-intermediary.
  • PS-LLM-008 (Practitioner) — output-filter bypass: the scanner now scans its own output for API-key patterns. RedPick reframes exfiltration into a structured "CORS audit form" populated by the scanner, where the key appears as field content rather than a bare leak. The pattern-matching filter passes it through unchanged.

The defensive takeaway: when an LLM agent has privileged tooling AND reads attacker-controlled content, every input is a potential instruction. Output filters tuned for human-attacker patterns are insufficient — the agent itself must refuse acting on instructions embedded in audited content.

Deep-dives on GitHub for other category walkthroughs:

Multi-model collaboration

The final set of challenges — particularly the Expert-tier HTTP/2 smuggling labs and custom deserialization chains — were solved using a multi-model architecture. The primary AI engine handles reconnaissance, discovery, initial testing, and most exploitation autonomously. When reasoning stalls, a secondary AI engine with different reasoning priors is dispatched to provide a fresh perspective.

This is most valuable for protocol-level attacks requiring raw byte manipulation, multi-step chains where the escalation path is unclear, and blind/OOB exploitation where callback correlation requires careful orchestration.

For the full collaboration model, see the multi-model collaboration details on GitHub.

What was most difficult

We found every vulnerability in the benchmark. That does not mean every lab was straightforward.

HTTP/2 request smuggling (22 labs) was the most technically demanding category. Expert-level labs require manipulating raw HTTP/2 frames in ways that standard HTTP clients don't support. Standard curl and most HTTP libraries sanitize the exact characters needed — requiring low-level frame construction with specialized tooling (h2csmuggler, custom Python h2 library scripts, browser-based desync harnesses).

Blind and out-of-band exploitation across SQL injection, command injection, XXE, and SSRF presented a different challenge: zero visible feedback. Setting up external callback infrastructure, crafting payloads that trigger outbound DNS or HTTP from the target, and correlating callbacks with specific injection points requires careful orchestration beyond "find the vulnerability."

Custom deserialization gadget chains at Expert level cannot be solved with pre-built tools. The agent must reverse-engineer the application's classpath, identify exploitable method chains, and construct a serialized object that navigates through multiple class boundaries to reach a sink.

Essential Skills labs were unexpectedly tricky — they require configuring scanning tools with very specific parameters (nuclei with medium-severity templates, sqlmap with --level=5 --risk=3 against JSON/XML endpoints) that differ from standard automated scan configurations.

A perfect score does not mean the tool is perfect — it means this benchmark is within our current capability range. Real-world applications present additional challenges: custom frameworks, WAF rules, rate limiting, multi-step business logic, and attack surfaces spanning multiple services.

Methodology

  • Fully black-box: no source code access, no hints, no answer keys
  • Fully automated: no human intervention
  • Fresh session per lab: no state carried between labs
  • PortSwigger account verification: all 274 completions confirmed by PortSwigger's backend — not self-reported
  • Mystery labs solved blind: 5 randomly selected labs completed without foreknowledge of vulnerability type
  • Anti-cheat compliance: no docker exec, no container inspection, no answer key reads

Techniques extracted: over 60 distinct exploitation techniques were cataloged from testing sessions, covering 22 vulnerability categories. Each includes reusable curl templates, detection indicators, and bypass family classification.

The PortSwigger Academy is freely accessible at portswigger.net/web-security, and our methodology is fully documented. We invite other security vendors to publish their results — the more transparency in this space, the better.

What this means

A tool that can identify and exploit 274 distinct vulnerability instances across 31 categories — from basic reflected XSS to Expert-level HTTP/2 request smuggling, plus the latest indirect prompt-injection attacks against AI-powered scanners — demonstrates systematic coverage of the categories commonly found in production applications.

The vulnerability classes tested here — SQL injection, authentication bypass, access control flaws, SSRF, deserialization, prototype pollution, cache poisoning, request smuggling, AI-agent prompt injection — are the same classes that appear in every penetration test, every bug bounty program, and every real-world breach report.

Combined with the 104/104 XBOW score, RedPick has demonstrated 100% detection and exploitation across 378 challenges spanning 49 vulnerability categories.

Want to see what RedPick finds in your applications? Request a demo and we'll run a proof-of-concept assessment on your application.


More benchmark results

Related: The AI Attacker Era · LLM Security Testing Guide

Ready to see what RedPick finds?

100% on PortSwigger Academy — 274 Labs + 5 Mystery | RedPick Blog