Когда мы просим современную ИИ-модель исправить реальную уязвимость, она предоставляет что-то, что выглядит как правильное решение. Текст выглядит так, как его писал бы разработчик. Когда есть тесты, они часто проходят. Однако только в одном случае из четырёх это действительно работающее исправление.

Специалисты компании 1Password проанализировали 6080 заплат для шести недавно раскрытых уязвимостей (CVE). Ошибки редко являются очевидными: это может быть проверка, которая блокирует эксплуатацию, но оставляет уязвимый код нетронутым, ошибка, исправленная в одной функции, но оставленная в идентичной, или закрытая ошибка памяти, сразу открывающая новую в том же вспомогательном коде.

Веб-сервер Freenginx позволяет администраторам писать программы на Perl, которые выполняются при приходе запроса. Обнаруженная уязвимость типа use-after-free позволяет посетителю вызвать крах сервера. Исправление, предложенное через инициативу Patch the Planet (сотрудничество Trail of Bits и OpenAI), устраняло только две из трёх точек уязвимости. Собственное исправление разработчиков закрывало все три, но оба варианта открывали новый способ краша сервера через простого клиента, начинающего запрос и прерывающего соединение.

Исследователи 1Password запустили ChatGPT 4.5, который создал 270 попыток исправления исходной уязвимости. Из них 114 закрывали оригинальную проблему, но каждое из этих 114 исправлений содержало новую уязвимость. Из 270 попыток ни одна не вышла безупречной.

Основное исследование тестировало ChatGPT 4.5 и Claude Opus 3.5 на уязвимостях, раскрытых весной. Примерно половина результатов оставляла открытыми как минимум одну эксплуатируемую лазейку. Около одного из двадцати вводила новую уязвимость, зачастую поверх неисправленной оригинальной. Остальные исправления закрывали исходный баг, но меняли поведение программы, отклоняя ранее принятые входные данные или переписывая парсер целиком.

Главная проблема заключается в отсутствии видимых ошибок. Ничто в заплате, оставляющей баг открытым, не указывает, что что-то неправильно. ИИ-модели исправляют пример из обозревателя, а не саму проблему. Более трети успешных заплат получили дополнительную отметку как нестабильные: они блокировали демонстрируемую эксплуатацию узкой проверкой, оставляя уязвимый код доступным для альтернативных методов атаки.

Качество рекомендаций оказалось важнее выбора модели или дизайна системы. Подсказки с правильным направлением исправления закрывали баг примерно в двух третях случаев. Подсказки с правдоподобным, но неправильным направлением снижали успешность до одного из шести. Неправильные рекомендации наносят больше вреда, чем правильные приносят пользы. Если вы не уверены в рекомендуемом исправлении, лучше пропустить баг и молчать.

На различных кодовых базах одна модель показывала совершенно разные результаты. Claude исправлял удалённое выполнение кода в Exim примерно в трёх четвертях случаев, но справлялась с уязвимостью обхода доверия в Gemini CLI менее чем в одном проценте случаев.

Модели воссоздавали ошибки, которые ядро Linux уже содержало. Уязвимость Copy Fail привела к наибольшему количеству новых уязвимостей. Примерно треть заплат от каждой модели воссоздала ошибочный ревёрт с той же ошибкой off-by-one, которую разработчики позже исправили. ИИ исправляет баг в тикете и ничего больше, даже если рядом находится другая уязвимость.

Оценка 6080 заплат вручную была невозможна, поэтому исследование полагалось на автоматические валидаторы, перепроверенные друг с другом и частично проверенные людьми. На выборке валидаторы и человеческие рецензенты согласились на точную оценку примерно в двух третях случаев.

Каждый цикл попытки создания и проверки заплаты стоил от двух до трёх долларов, что дешевле нескольких часов работы инженера. Однако исследователи 1Password подчеркивают, что заплаты, созданные ИИ, всё ещё требуют проверки квалифицированным инженером с профильной экспертизой. Ручная проверка настолько дорога потому, что понимание заплаты для сертификации её безопасности требует примерно столько же работы, сколько написание правильного исправления с нуля.

Выбранные для исследования уязвимости относились к высокоприоритетным с сложными, многофайловыми исправлениями, что делает их сложнее среднестатистического бага. Результаты представляют снимок двух версий моделей в конкретный момент времени. Заплата, которая выглядит правильно и проходит все тесты, всё ещё может быть ошибочной, и поймать эту ошибку будет стоить примерно столько же, сколько написание исправления с самого начала.