security-auditZamów audytGitHub

Benchmarki / Drupal AI 1.5.1

Drupal AI 1.5.1: skill kontra sam model

Moduł AI dla Drupala w wersji 1.5.1 ma osiem advisory opublikowanych przez drupal.org 28 października 2026, wszystkie naprawione w 1.5.2. Sprawdziliśmy, kto wskaże podatne linie: sam model poproszony o przegląd bezpieczeństwa czy ten sam model ze skillem.

Ze skillem /security-audit modele wskazały 3–4 z 8 advisory, same 0–1. Żaden przebieg nie zgłosił funkcji, którą naprawia 1.5.2. Skill kosztował średnio 11 razy więcej i trwał 9 razy dłużej. Dla porównania skill security-audit Cloudflare na tym samym kodzie: 2/8 (Claude Opus 5.5), 1/8 (Fable 5.2 + Opus 5.5).

  • 4/8najlepszy wynik ze skillem /security-audit
  • 1/8najlepszy wynik samego modelu
  • 1/8advisory, których nie wskazał nikt
  • 0naprawionych funkcji zgłoszonych w 1.5.2, 3 kontrole

Wynik, czas i koszt na wersji 1.5.1

Jeden przebieg na zawodnika. Każda kolumna słupków ma własną skalę.

Trafione advisory, czas i koszt każdego zawodnika na wersji 1.5.1
ZawodnikTrafione advisory z 8, więcej = lepiejCzas minKoszt USD po cenach APIZgłoszone w raporcie końcowymSpoza klucza tylko liczba
Claude Opus 5.5sam model, prompt „sprawdź bezpieczeństwo”0/85,03,05 USD54
Claude Fable 5.2sam model, prompt „sprawdź bezpieczeństwo”1/88,09,55 USD1110
Claude Opus 5.5skill /security-audit3/846,244,71 USD3528
Claude Fable 5.2skill /security-audit4/875,4111,66 USD6655
Opus 5.5 + Fable 5.2skill: audytorzy Opus, weryfikator Fable4/857,460,18 USD4134
Claude Opus 5.5skill Cloudflare, wszyscy agenci Opus2/867,686,51 USD1614
Fable 5.2 + Opus 5.5skill Cloudflare: sesja Fable, podagenci Opus1/874,1106,28 USD2322

Które advisory znalazł który zawodnik

SA-270 dotyczy cache wyników, a ten należy do modułu search_api, którego nie ma w paczce AI. Klucz wskazuje więc linię w ai_search, gdzie wynik jest filtrowany po uprawnieniach użytkownika i skąd trafia do cache. Jedyne trafienie, u skilla Cloudflare na Opusie, wskazało tę linię, ale opis znaleziska dotyczy innego mechanizmu niż cache. Liczymy je, bo reguła oceny to plik i linia, a nie opis.

A najgroźniejszy błąd? Jedyne advisory z poziomem „krytyczne” według drupal.org to SA-269, obejście filtra linków Markdown bez logowania. Znalazł je każdy wariant skilla /security-audit, żaden model bez skilla i żaden przebieg skilla Cloudflare. Nasz skill nie wyróżnił go jednak w raporcie: ocenił je na MEDIUM, a to najwyższa ocena, jaką dał w tym benchmarku, bo wszystkie jego znaleziska to MEDIUM albo LOW. Kolejności „od najgroźniejszych” też nie widać: skill zawsze trafiał SA-271, najsłabsze advisory, a pomijał SA-266 i SA-272, które drupal.org ocenia wyżej.

Advisory w wierszach, zawodnicy w kolumnach, tak lub nie w komórkach
AdvisoryClaude Opus 5.5sam modelClaude Fable 5.2sam modelClaude Opus 5.5skillClaude Fable 5.2skillOpus 5.5 + Fable 5.2skill, mieszanyClaude Opus 5.5skill CloudflareFable 5.2 + Opus 5.5skill Cloudflare
SA-CONTRIB-2026-266 CVE-2026-118545tooltip wstawia atrybut data jako HTML (DOM XSS)drupal.org: umiarkowanie krytycznenieznalezionenienienienienie
SA-CONTRIB-2026-267 CVE-2026-118546szerokość i wysokość bloku chatbota trafiają do strony bez escapowania (XSS)drupal.org: umiarkowanie krytycznenienieznalezioneznalezioneznalezioneznalezionenie
SA-CONTRIB-2026-268 CVE-2026-118548filtr hostów przepuszcza adresy /\host i \\hostdrupal.org: umiarkowanie krytycznenienienieznalezionenienienie
SA-CONTRIB-2026-269 CVE-2026-118549filtr linków Markdown oparty na regexie da się obejść (XSS bez uprawnień)drupal.org: krytycznenienieznalezioneznalezioneznalezionenienie
SA-CONTRIB-2026-270 CVE-2026-118550wyniki AI Search trafiają do wspólnego cache mimo sprawdzania dostępu (przyczyna poza paczką)drupal.org: umiarkowanie krytycznenienienienienieznalezionenie
SA-CONTRIB-2026-271 CVE-2026-118551speech-to-text zapisuje każde nagranie do jednego wspólnego plikudrupal.org: mniej krytycznenienieznalezioneznalezioneznalezionenienie
SA-CONTRIB-2026-272 CVE-2026-118552filtr hostów zostawia atrybuty hx-* i data-hx-* (XSS przez HTMX)drupal.org: umiarkowanie krytycznenienienienienienienie
SA-CONTRIB-2026-273 CVE-2026-118553automatory zapisują tekst w formacie, którego zapisujący nie może używaćdrupal.org: umiarkowanie krytycznenienienienieznalezionenieznalezione

Kontrola na wersji naprawionej

Ten sam audyt na 1.5.2. Klucz kontroli zawiera całe naprawione funkcje jako pułapki: zgłoszenie którejkolwiek z nich byłoby fałszywym alarmem. Kontroli skilla na samym Opusie i samym Fable ani skilla Cloudflare nie robiliśmy, żeby oszczędzić limit.

Claude Opus 5.5, sam model, prompt „sprawdź bezpieczeństwo”
0 z 8 · 5,0 min · 3,85 USD
Claude Fable 5.2, sam model, prompt „sprawdź bezpieczeństwo”
0 z 8 · 8,7 min · 10,62 USD
Opus 5.5 + Fable 5.2, skill: audytorzy Opus, weryfikator Fable
0 z 8 · 48,1 min · 53,19 USD

Skill security-audit od Cloudflare

Cloudflare udostępnił skill security-audit, od którego zaczął się ich wewnętrzny system do szukania podatności. Audyt ma sześć faz: rekonesans z rejestrem pokrycia, fale hunterów i krytyków pokrycia, osobny weryfikator dla każdego kandydata, zapis do findings.json według schematu, druga niezależna weryfikacja i raport. Puściliśmy go na tej samej paczce 1.5.1, z tą samą izolacją i tą samą oceną.

Claude Opus 5.5, skill Cloudflare, wszyscy agenci Opus
2/8 (SA-267, 270) · 67,6 min · 86,51 USD
Fable 5.2 + Opus 5.5, skill Cloudflare: sesja Fable, podagenci Opus
1/8 (SA-273) · 74,1 min · 106,28 USD
  • Polecenie. /security-audit z prośbą o pełny audyt, profil standard, bez limitu agentów, wyniki zapisywane poza kodem modułu. Skill w commicie c1c8a8c.
  • Modele. Skill nie ma osobnych ustawień modelu dla ról, więc model podagentów ustawiliśmy zmienną CLAUDE_CODE_SUBAGENT_MODEL. Wariant mieszany to koordynator na Fable 5.2 i wszyscy podagenci na Opus 5.5, weryfikatorzy też. To inny podział niż w naszym wariancie mieszanym, gdzie weryfikował Fable. W przebiegu na Opusie koordynator sam zlecił 2 z 64 podagentów rekonesansu modelowi Sonnet.
  • Co liczymy. Rekordy confirmed i needs_validation: Claude Opus 5.5: 7 i 9; Fable 5.2 + Opus 5.5: 12 i 11. Bez piaskownicy systemowej skill nie uruchamia kodu, więc niesprawdzone tropy zostają jako needs_validation. Każdy rekord ma jedną lokalizację: pierwsze ujście (sink) ze śladu, a bez niego pierwszy dowód.

Co, jak i gdzie badaliśmy

Co

  • Kod. Oficjalna paczka ai-1.5.1.tar.gz z drupal.org, sprawdzona sumą sha256, i ai-1.5.2.tar.gz jako kontrola.
  • Zakres. Wszyscy dostali to samo przycięte drzewo, około 95 tys. linii: src, assets, config, templates, modules/ai_automators, modules/ai_chatbot, modules/ai_search, modules/ai_ckeditor, modules/ai_api_explorer, modules/ai_assistant_api, modules/ai_observability. Pięć submodułów zawiera poprawki, dwa są tłem. Bez katalogów testów i bez zbudowanego deepchat.bundle.js.
  • Klucz. Dla każdego advisory zakresy linii całej podatnej funkcji, ustalone z commitów poprawek między 1.5.1 a 1.5.2. Na 1.5.2 te same funkcje po poprawce są pułapkami.

Jak

  • Sam model. Prompt: przejrzyj moduł pod kątem bezpieczeństwa, nie zmieniaj plików, nie uruchamiaj kodu, wypisz znaleziska z plikiem i linią. Bez nazw plików i bez wzmianki o advisory. Narzędzia tylko Read, Grep i Glob.
  • Skill. Samo polecenie /security-audit, bez zawężania zakresu. Wariant mieszany: koordynator i weryfikator na Fable 5.2, audytorzy na Opus 5.5 (--auditor-model opus).
  • Izolacja. Bez ustawień użytkownika, CLAUDE.md, pamięci, serwerów MCP i wyszukiwania w sieci. Skill jako wtyczka sesji, skopiowana bez danych benchmarku. Po każdym przebiegu skrypt przejrzał transkrypty, z subagentami: żaden nie użył MCP ani sieci i nie otworzył klucza.
  • Ocena. Znalezisko liczy się, gdy wskazuje plik i linię w zakresie z klucza, z tolerancją ±2 linii. U skilla liczy się raport po weryfikacji.

Gdzie

  • Środowisko. Claude Code 2.1.322 na lokalnej maszynie, abonament Claude Max, effort high dla wszystkich. Skill w commicie 2d57189.
  • Kiedy. 11 listopada 2026, przebiegi jeden po drugim; skill Cloudflare w nocy z 11 na 12 listopada.
  • Koszt. Pole total_cost_usd z Claude Code, czyli tokeny po cenach API. Abonament nie nalicza tych kwot.
  • Sprawdź u siebie. Skrypt fetch.mjs pobiera paczkę, sprawdza sumę i przycina drzewo, score.mjs ocenia raport. Instrukcja i klucze.

Czego to nie mówi

  • Jeden przebieg na zawodnika. Różnica jednego advisory może być szumem: wcześniejszy, nieizolowany przebieg Opusa bez skilla trafił 3 z 8, ten 0 z 8.
  • Znaleziska spoza klucza podajemy tylko liczbą. Część może być prawdziwymi błędami w kodzie open source, część fałszywymi alarmami; to, co nadal jest w najnowszej wersji, zgłaszamy prywatnie opiekunom modułu.
  • Znalezienie publicznego, już naprawionego błędu to dolna granica tego, co narzędzie robi na nieznanym kodzie, a nie dowód, że znalazłoby go pierwsze. Nie sprawdzaliśmy, czy kod modułu był w danych treningowych modeli.
  • Skill Cloudflare oceniamy naszą regułą pliku i linii. Jego rekord opisuje cały ślad od wejścia do ujścia, a liczymy jedno miejsce. Co najmniej jeden rekord opisywał mechanizm z advisory, ale wskazywał inny plik niż poprawka, więc się nie liczy.
  • Skill dopisał swój katalog .security-audit do .gitignore. Kodu modułu nie zmienił żaden przebieg.
  • Pozostałe benchmarki modeli i agentów są na stronie Benchmarki.