В первой части я разогнал GateAI кэшированием, нашёл несколько багов и проверил триаж на DVWA и pyGoat.

Теперь решил прогнать те же задачи через бесплатную модель и посмотреть, насколько результат будет отличаться от Claude

Подключаем OpenRouter

GateAI изначально работал только с Anthropic API, поэтому для OpenRouter пришлось добавить отдельный HTTP‑клиент и agentic‑цикл под OpenAI‑совместимый tool calling.

Инструменты при этом остались те же: 6 тулов с одинаковыми описаниями и схемами. Остальной пайплайн тоже не менял.

Для теста взял stealth/ox-alpha — модель на OpenRouter с контекстом 1M.

Первый же тест на одной находке занял 8.5 минут. Claude на ней обычно требовалось 15–60 секунд. Причин оказалось несколько:

  1. HTTP‑клиент имел таймаут 120 секунд. Для ox‑alpha этого мало — отдельный ответ иногда генерировался больше двух минут. Поднял таймаут до 10 минут.

  2. Skeptic‑проход тоже пришлось отключить. Модель доходила до лимита в 14 итераций, продолжала читать код, но так и не вызывала submit_verdict.

Потом на DVWA OpenRouter один раз вернул ошибку провайдера. К этому моменту уже были обработаны 44 из 45 находок, но упал весь стейдж. В моём клиенте просто не было ретраев. Добавил три попытки с backoff.

Заодно нашёл ещё один баг в кэше: max_iterations не входит в cache key. Если увеличить лимит и запустить анализ заново, можно получить старый закэшированный needs_human.

После этих исправлений исходный тест дошёл до того же not_exploitable, что и Claude, уже за 2 минуты вместо 8.5.

DVWA

На DVWA получилось 45 находок у ox‑alpha и 43 у Claude. Небольшая разница, скорее всего, из‑за semgrep между прогонами.

Здесь результат оказался довольно близким.

5 из 6 находок на пропатченных impossible.php ox‑alpha правильно отправила в not_exploitable и нашла нужную проверку в impossible.php:12-17.

На шестой она тоже правильно разобрала код и указала нужные строки в тексте, но не положила их в поле evidence.

Guardrail поэтому заменил результат на:

needs_human: verdict cited no verifiable file:line evidence

То есть сам код разобран правильно, но ответ не прошёл проверку формата.

Ещё 4 из 5 needs_human появились просто из‑за:

iteration limit of 10 reached

pyGoat

На pyGoat было 58 находок: RCE через eval и pickle, command injection, SSTI, unsafe YAML и другие.

ox‑alpha правильно нашла eval‑RCE в views.py:456/460 и pickle‑RCE в views.py:214. В одном месте она даже раскопала больше Claude.

В apis.py:59-74 API записывает присланный код в Python‑модуль. ox‑alpha проследила импорт этого файла через urls.py и заметила, что Django autoreload может выполнить записанный код при следующей перезагрузке.

Но здесь проявилась основная проблема:

  1. 20 из 58 находок (34.5%) закончились по iteration limit of 10 reached.

  2. По логам модель при этом продолжала нормально работать. Она читала файлы, проверяла настройки и искала следующие части цепочки. Просто заканчивались итерации.

Из‑за этого она не дошла, например, до SQL‑инъекции в views.py:158/162 и небезопасного yaml.Loader в views.py:560.

Claude обе находки разобрал с первого раза.

Цифры

У Claude ни в одном из трёх прогонов не было needs_human из‑за лимита итераций.

У ox‑alpha — 8.9% на PHP и 34.5% на Python

ox‑alpha также тратит примерно в 2–2.7 раза больше входных токенов на находку

Промпт и инструменты при этом одинаковые

На DVWA итоговые результаты довольно похожи.

На pyGoat разница заметнее: у ox‑alpha сильно больше needs_human, в основном из‑за лимита итераций.

Итог

Если ox‑alpha успевает закончить разбор, результат часто получается близким к Claude. Иногда она даже находит дополнительные детали. Проблема в том, как часто она до этого результата доходит. На pyGoat 34.5% находок закончились по лимиту итераций. Среди них были SQLi и unsafe YAML, которые Claude разобрал с первого раза. Плюс ox‑alpha потребовалось примерно в 2–2.7 раза больше входных токенов. Но за это платишь временем и стабильностью. А подключение второго провайдера заодно нашло ещё три проблемы в GateAI: таймаут, отсутствие ретраев и неполный cache key.

Мой тгк - @kovachvl_sec
Подписывайтесь :)