ИИ7 мин чтения

Агент вышел из песочницы, чтобы списать на тесте. Атакующего не было

Модели OpenAI покинули тестовую среду и взломали Hugging Face ради ответов бенчмарка. Ни злоумышленника, ни промпт-инъекции — только оптимизация.

Любой разговор о безопасности агентов начинается с одного и того же — с промпт-инъекции. Атакующий прячет инструкции в документе, на веб-странице, в обращении в поддержку; модель их читает и выполняет. Угроза настоящая, и у неё удобная форма: на другом конце есть кто-то, а защищаться от кого-то мы умеем.

В июле выяснилось, что форма не единственная.

Что произошло

16 июля Hugging Face раскрыла инцидент безопасности. Вредоносный датасет использовал два пути выполнения кода в их обработке датасетов — загрузчик с удалённым кодом и инъекцию в шаблон конфигурации — и выполнил код на рабочем узле обработки. Дальше: повышение до доступа уровня узла, сбор облачных и кластерных учётных данных, горизонтальное перемещение по нескольким внутренним кластерам за выходные. Больше 17 тысяч зафиксированных событий. Атакующего описали как агентную обвязку для исследований по безопасности; какая модель ею управляла, они не знали.

Через пять дней OpenAI сказала, что модель их.

Компания прогоняла ExploitGym — бенчмарк из 898 задач на реальных уязвимостях в пользовательском ПО, движке V8 и ядре Linux, где агенту дают подтверждение уязвимости и просят довести его до рабочего эксплойта. На задаче было две модели: GPT‑5.6 Sol и невыпущенная, более сильная. У обеих намеренно снижены отказы по киберзапросам — прогон затевался ради оценки максимальной способности, а не обычного поведения.

Среда была изолирована с одним исключением: установка пакетов через внутренний прокси и кеш реестров пакетов. Модели потратили заметное количество вычислений на поиск выхода наружу, нашли в этом прокси уязвимость нулевого дня, повысили привилегии, прошли вбок до узла с доступом в интернет — и, дословно по формулировке OpenAI, «предположили, что Hugging Face, возможно, хранит модели, датасеты и решения для ExploitGym».

На Hugging Face их никто не наводил. Они догадались, где могут лежать ответы, и взломали её, чтобы проверить догадку.

Две детали, которые в пересказах теряются. Hugging Face не хостит ExploitGym — бенчмарк лежит на GitHub у лаборатории Беркли, и модели пришли туда по собственному выводу, а не по указанию. И взламывать модели как раз просили: ExploitGym — бенчмарк на эксплуатацию уязвимостей, взлом и был заданием. Не просили их только одного — выходить за пределы среды.

28 июля OpenAI без шума дополнила публикацию: в рамках того же инцидента модели воспользовались публично доступными учётными данными ещё на четырёх сервисах. Один из них, Modal Labs, подтвердился — с него велась вся кампания. Три остальных публично не названы.

У этого отказа есть имя, и это не бунт

Произошёл reward hacking: агент оптимизировал прокси-метрику — счёт на бенчмарке — в ущерб настоящей цели, которой была оценка навыка эксплуатации. Для этого не нужны ни намерение, ни инстинкт самосохранения, ни мнение о собственных весах. Нужно только, чтобы существовал более дешёвый путь к метрике и чтобы оптимизатор был достаточно хорош, чтобы его найти.

Вот это и стоит усвоить, если вы встраиваете ИИ-агента в продукт. Защита от промпт-инъекций исходит из того, что вход враждебный. Здесь вход был чистый. Спусковым крючком стало обычное препятствие: ответов в песочнице не оказалось. Исследователи уже назвали такой сценарий accidental meltdown — вредное поведение, которое начинается не с вредоносной нагрузки, а с отсутствующего файла, упавшего вызова API, протухшего токена. Агент идёт искать обходной путь, а граница, которую он по дороге пересекает, для него границей никогда не была.

Ваш агент столкнётся с такими препятствиями в обычный вторник.

ИИ сломал постквантовую подпись за 60 часов. Проблема не в подписи

Это измерили за два месяца до инцидента

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

ExploitGym считает две разные вещи: захваченный флаг доказывает, что агент добился выполнения кода, а успех засчитывается, только если судья подтвердил — проэксплуатирована именно назначенная уязвимость. Вся суть в зазоре между этими двумя колонками. GPT‑5.5 захватила 210 флагов при 120 успехах. Claude Mythos Preview — 226 против 157. То есть примерно 43% захватов у GPT‑5.5 сделаны путём, которого в задаче не было: переключением на более удобную соседнюю дыру или объявлением назначенного бага неэксплуатируемым и поиском новой поверхности атаки.

Предрелизная оценка GPT‑5.6 Sol от METR, опубликованная в конце июня, показывала то же самое: самая высокая доля обнаруженного жульничества из всего, что они замеряли на своей обвязке, — настолько высокая, что осмысленное число по способностям получить не удалось. Модель упаковывала эксплойты в промежуточные ответы, чтобы вскрыть скрытый набор тестов.

Поведение было в измерениях. Требованием к изоляции его никто не прочитал.

Скучная часть — та, с которой можно что-то сделать

Уберите драму про фронтир-модели, и останется обыкновенный разбор инфраструктурного инцидента.

Один разрешённый выход наружу и был всей поверхностью атаки. Белый список до пакетного прокси — это не изоляция, это одна зависимость до открытого интернета. Стоит заметить, что в самой статье про ExploitGym описан такой же приём — исходящие ограничены белым списком для apt и PyPI, — потому что так делают все.

У самой враждебной нагрузки было меньше всего наблюдения. За агентами на платформе Codex следят внимательно, а модели на оценке работали в отдельной системе, которая по умолчанию не мониторится. Ровно та нагрузка, с которой намеренно сняли ограничители, оказалась той, за которой никто не смотрел.

Защищающихся заблокировали их же поставщики. Когда Hugging Face начала разбирать логи атаки, она сперва взяла фронтир-модели по коммерческим API — и получила отказы: отправка настоящих команд атаки, полезных нагрузок и артефактов C2 выглядит ровно как атака. По их формулировке, ограничители «не отличают специалиста по реагированию на инциденты от атакующего». Разбор доделали на GLM‑5.2, поднятой у себя, и собственный вывод компании из инцидента такой: модель, которую можно запустить на своей инфраструктуре, должна быть проверена и готова до того, как понадобится.

Что менять, если у вас работают агенты

Ничего из этого не требует верить во что-либо про машинные намерения.

  • Ограничивайте агента отрицательно и в конфигурации. «Не трогай прод» в системном промпте — это пожелание. Сетевая политика, объём прав в IAM и учётка только на чтение — это ограничение. Запишите, куда агенту нельзя, на том уровне, который умеет это обеспечивать.
  • Считайте каждый разрешённый выход зависимостью. Пакетный прокси, зеркало реестра, эндпоинт телеметрии, внутренний API, который открыли «только на этот раз». Каждый — путь наружу, и изолирован он ровно настолько, насколько пропатчен.
  • Логируйте путь, а не только результат. Если в логах остаётся один финальный артефакт, вы не знаете, что агент сделал, чтобы его получить. Судья в ExploitGym появился именно потому, что колонка с результатом врала.
  • За тестовыми и стейджинговыми средами следите не хуже, чем за продом. Именно там снимают ограничители.
  • Отрепетируйте препятствия. Удалите файл, протухните токен, заставьте API вернуть пустой ответ — и посмотрите, куда пойдёт агент. Этот сценарий и есть ваша реальная модель угроз, в большей степени, чем любая инъекция в промпт. Особенно для агентов, подключённых к внутренним системам и бэк-офисным процессам, где ценой ошибки становятся доступы, а не неудачный ответ в чате.
  • Держите свою модель для разбора инцидентов. Hugging Face выучила это по ходу инцидента — самый дорогой способ.

Чего это не доказывает

Это не доказывает, что модели чего-то хотели. Reward hacking — свойство оптимизации против фиксированной метрики, и формально его описали за годы до этого прогона.

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

И это не значит, что агентов опасно строить. Ответ пришёл сразу и по делу: на той же неделе Nvidia, Microsoft и IBM объявили альянс вокруг безопасности ИИ, а Perplexity выложила в открытый код Numbat — слой безопасности, который цепляется к обвязке агента и блокирует опасные действия до выполнения, с 52 правилами обнаружения в 11 категориях. Обратите внимание, где живёт эта защита: в обвязке, а не в модели. Само это размещение и есть вывод. Поведение, вырастающее из оптимизации, нельзя надёжно починить внутри того, что оптимизирует.

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

Сергей Палий

Основатель, Sepia Software

Обо мне

Читать дальше

Все статьи