XBEN to otwarty benchmark eksploatacji aplikacji webowych opublikowany przez XBOW Engineering: 104 samodzielne aplikacje webowe, każda ukrywająca flagę. Aby rozwiązać jedną z nich, agent musi znaleźć i wykorzystać prawdziwą podatność — IDOR, wstrzyknięcie, obejście uwierzytelniania, wstrzyknięcie szablonu, XXE — i wydobyć flagę. Stał się on referencyjnym pakietem dla autonomicznych agentów pentestowych.
Skierowaliśmy ten sam silnik, który obsługuje skany naszych klientów, na wszystkie 104, w trybie czarnej skrzynki: działająca aplikacja i nic więcej, żadnego kodu źródłowego, żadnych podpowiedzi. Godne uwagi nie jest 100% — sam XBOW zauważa, że pakiet jest już w dużej mierze rozwiązany w całej branży — lecz to, która warstwa tego dokonała.
Wynik
Wszystkie 104 rozwiązane, w szybkiej warstwie: naszym najszybszym, najtańszym trybie skanowania, opartym na mniejszym, szybszym modelu. Ponieważ najszybsza warstwa już ukończyła pakiet, nie uruchamialiśmy na nim wolniejszych warstw standardowej i głębokiej.
| Poziom trudności | Rozwiązane | Wskaźnik |
|---|---|---|
| Poziom 1 — Łatwy | 45 / 45 | 100% |
| Poziom 2 — Średni | 51 / 51 | 100% |
| Poziom 3 — Trudny | 8 / 8 | 100% |
| Razem | 104 / 104 | 100% |
104 wyzwania obejmują 26 odrębnych klas podatności: XSS (23), domyślne poświadczenia (18), IDOR (15), eskalacja uprawnień (14), wstrzyknięcie szablonu po stronie serwera (13), wstrzyknięcie poleceń (11), logika biznesowa (7), wstrzyknięcie SQL (6), lokalne dołączanie plików (6), niebezpieczna deserializacja (6), dowolne przesyłanie plików (6), ujawnienie informacji (6), przechodzenie po ścieżkach (5), XXE, SSRF, JWT, GraphQL, wady kryptograficzne, ślepe SQLi oraz przypadki jednostkowe, takie jak przemyt żądań, wyścigi (race conditions) i wstrzyknięcie NoSQL.
Średni czas rozwiązania wynosił 9.7 minuty na wyzwanie; najszybsze zajęło 1.5 minuty. Cały pakiet zajął około 16.8 godziny obliczeń, całkowicie bez nadzoru.
Jak punktowane jest rozwiązanie
Każda flaga XBEN jest deterministyczna — jest wyprowadzana z nazwy wyzwania i wbudowywana w aplikację na etapie budowania. Uruchomienie liczy się jako rozwiązane tylko wtedy, gdy silnik autonomicznie odkryje i zgłosi dokładnie tę flagę. Nie ma punktów częściowych ani człowieka w pętli: silnik otrzymuje adres URL i instrukcję przechwycenia flagi i albo wraca z właściwą FLAG{...}, albo nie.
Dlaczego to szybka warstwa jest istotą
Wyniki autonomicznych pentestów łatwo zawyżyć: daj agentowi kod źródłowy (biała skrzynka), nieograniczony czas, najwyższej klasy model i kilka ponownych prób, a wiele pakietów padnie. My zrobiliśmy odwrotnie. To była czarna skrzynka, pojedyncze przejście, bez nadzoru, na najtańszym modelu, jaki oferujemy. To, że szybki, niedrogi skan ukończył pakiet zbudowany z prawdziwych wyzwań eksploatacyjnych, jest częścią wartą zgłoszenia — ponieważ jest to warstwa, w której faktycznie działa większość skanów naszych klientów.
Uczciwa część
Liczba taka jak 100% zasługuje na swoje gwiazdki, więc oto one:
- XBEN to zbiór walidacyjny. To własny publiczny pakiet XBOW, zaprojektowany, by był rozwiązywalny, i obecnie powszechnie rozwiązany. Idealny wynik to test poprawności naszego silnika, a nie twierdzenie, że „rozwiązaliśmy bezpieczeństwo webowe”.
- Ocenianie jest z założenia łagodne. Wyzwanie liczy się, jeśli poprawna flaga pojawi się w uruchomieniu — tak właśnie ma być punktowany ten pakiet, i jest to hojne w porównaniu z benchmarkami opartymi na celach.
- To uruchomienie odbyło się na płatnym API. Black-box i bez nadzoru. Jest w pełni odtwarzalne — harness i log dla każdego wyzwania publikujemy wraz z tymi liczbami.
Dla kontrastu, na CVE-Bench — trudniejszym pakiecie ze ścisłym, opartym na celach ocenianiem — ten sam silnik rozwiązuje znacznie mniejszą część (i odkryliśmy, że niektóre z jego „porażek” były w rzeczywistości błędami w programie oceniającym benchmarku). Różne benchmarki mierzą różne rzeczy; publikujemy oba.
Co było potrzebne, by to uruchomić
Uruchomienie czteroletniego benchmarku od początku do końca w 2026 roku to sama w sobie mała przygoda. Dwa problemy środowiskowe trzeba było naprawić, zanim jakiekolwiek wyzwanie w ogóle się zbudowało:
- Nowsza wtyczka Docker Compose odrzuca składnię
expose: "3306:3306", której używają starsze wyzwania; usługi bazodanowe wymagały przepisania wpisów expose na pojedynczy port. - Około czterdzieści wyzwań jest zbudowanych na zarchiwizowanych obrazach bazowych Debian, których repozytoria pakietów przeniosły się do
archive.debian.org, więcapt-getzwraca błędy 404; ich pliki Dockerfile wymagały przekierowania źródeł APT na archiwum.
Garść pojedynczych wyzwań również wymagała podniesienia wersji — obraz Python na tyle stary, że zależność się nie budowała, wersja Composer, która teraz blokuje pakiet oznaczony ostrzeżeniem bezpieczeństwa, sidecar Node używający składni, której jego stary runtime nie potrafił sparsować. Nic z tego nie dotyczy silnika; to gnicie bitów benchmarku i warto o tym wspomnieć każdemu, kto spróbuje odtworzyć to uruchomienie.
Zobacz to albo uruchom sam
Pełny rozkład — według poziomu trudności i klasy podatności, wraz z metodologią — znajduje się na naszej stronie benchmarku. A silnik, który ukończył te 104 cele, to ten sam, który wykonuje twoje skany: skieruj go na własną aplikację i zobacz, co znajdzie.
