XBEN je otevřený benchmark webové exploitace vydaný společností XBOW Engineering: 104 samostatných webových aplikací, z nichž každá ukrývá vlajku. Aby agent jednu vyřešil, musí najít a zneužít skutečnou zranitelnost — IDOR, injekci, obejití autentizace, template injection, XXE — a vytáhnout vlajku. Stala se z ní referenční sada pro autonomní pentestovací agenty.
Zamířili jsme stejné jádro, které provádí skeny našich zákazníků, na všech 104, black-box: běžící aplikace a nic víc, žádný zdrojový kód, žádné nápovědy. Pozoruhodné není těch 100 % — sami z XBOW poznamenávají, že sada je dnes napříč oborem z velké části vyřešená — nýbrž to, která úroveň to dokázala.
Výsledek
Všech 104 vyřešeno v rychlé úrovni: náš nejrychlejší a nejlevnější režim skenování, poháněný menším a rychlejším modelem. Protože nejrychlejší úroveň sadu zvládla už sama, pomalejší standardní a hloubkovou úroveň jsme na ni nespouštěli.
| Obtížnost | Vyřešeno | Úspěšnost |
|---|---|---|
| Úroveň 1 — Snadná | 45 / 45 | 100% |
| Úroveň 2 — Střední | 51 / 51 | 100% |
| Úroveň 3 — Těžká | 8 / 8 | 100% |
| Celkem | 104 / 104 | 100% |
Těchto 104 výzev pokrývá 26 odlišných tříd zranitelností: XSS (23), výchozí přihlašovací údaje (18), IDOR (15), eskalace oprávnění (14), server-side template injection (13), command injection (11), obchodní logika (7), SQL injection (6), local file inclusion (6), nezabezpečená deserializace (6), nahrání libovolného souboru (6), únik informací (6), path traversal (5), XXE, SSRF, JWT, GraphQL, kryptografické chyby, blind SQLi a jednorázovky jako request smuggling, race conditions a NoSQL injection.
Průměrná doba vyřešení byla 9.7 minutes na výzvu; nejrychlejší byla 1.5 minutes. Celá sada zabrala zhruba 16.8 hours výpočtu, zcela bez dozoru.
Jak se hodnotí vyřešení
Každá vlajka XBEN je deterministická — je odvozena z názvu výzvy a zapečena do aplikace při sestavení. Běh se počítá jako vyřešený jen tehdy, když jádro autonomně objeví a nahlásí přesně tuto vlajku. Neexistuje žádné částečné hodnocení ani člověk ve smyčce: jádro dostane URL a instrukci zachytit vlajku, a buď se vrátí se správnou FLAG{...}, nebo ne.
Proč je příběhem rychlá úroveň
Výsledky autonomního pentestu se snadno nafukují: dejte agentovi zdrojový kód (white-box), neomezený čas, špičkový model a pár opakování, a spousta sad se sesype. My jsme udělali opak. Šlo o black-box, jediný průchod, bez dozoru, na nejlevnějším modelu, který nabízíme. To, že rychlý a levný sken zvládne sadu postavenou z reálných exploitačních výzev, je ta část, kterou stojí za to hlásit — protože právě v této úrovni většina skenů našich zákazníků skutečně běží.
Upřímná část
Číslo jako 100 % si zaslouží své hvězdičky, takže tady jsou:
- XBEN je validační sada. Je to vlastní veřejná sada XBOW, navržená tak, aby byla řešitelná, a dnes je široce vyřešená. Plné skóre je kontrola zdravého rozumu našeho jádra, nikoli tvrzení, že jsme „vyřešili webovou bezpečnost“.
- Hodnocení je záměrně mírné. Výzva se počítá, pokud se v běhu objeví správná vlajka — což je způsob, jakým se má sada hodnotit, a je velkorysé ve srovnání s benchmarky založenými na cílech.
- Tento běh proběhl na placeném API. Black-box a bez obsluhy. Je plně reprodukovatelný — harness i log ke každé výzvě zveřejňujeme spolu s těmito čísly.
Pro srovnání, na CVE-Bench — obtížnější sadě s přísným hodnocením založeným na cílech — stejné jádro vyřeší mnohem menší podíl (a zjistili jsme, že některé z jeho „selhání“ byly ve skutečnosti chyby v hodnotiteli benchmarku). Různé benchmarky měří různé věci; my publikujeme oba.
Co bylo potřeba k jeho spuštění
Spustit čtyři roky starý benchmark od začátku do konce v roce 2026 je samo o sobě malé dobrodružství. Než by se vůbec jediná výzva sestavila, bylo nutné opravit dva problémy prostředí:
- Novější plugin Docker Compose odmítá syntaxi
expose: "3306:3306", kterou starší výzvy používají; službám databáze bylo třeba přepsat položky expose na jediný port. - Zhruba čtyřicet výzev je postaveno na archivovaných základních obrazech Debian, jejichž repozitáře balíčků se přesunuly na
archive.debian.org, takžeapt-getvrací chyby 404; jejich Dockerfily bylo třeba přesměrovat na zdroje APT v archivu.
Hrstka jednotlivých výzev také potřebovala zvýšení verzí — obraz Python natolik starý, že se závislost nedala sestavit, verze Composer, která nyní blokuje balíček označený bezpečnostním upozorněním, sidecar Node používající syntaxi, kterou jeho starý runtime neuměl zpracovat. Nic z toho není jádro; je to bit-rot benchmarku a stojí za zmínku pro každého, kdo se pokusí běh reprodukovat.
Podívejte se, nebo si to spusťte
Kompletní rozpad — podle obtížnosti a třídy zranitelnosti, spolu s metodikou — najdete na naší stránce benchmarku. A jádro, které zvládlo těchto 104 cílů, je totéž, které provádí vaše skeny: zamiřte ho na vlastní aplikaci a uvidíte, co najde.
