ИИ-агент взломал Hugging Face: 17 600 попыток и один успех

13 мин чтения
mysummit.school
mysummit.school Engineering Leader в Microsoft
ИИ-агент взломал Hugging Face: 17 600 попыток и один успех

В середине июля Hugging Face опубликовала разбор инцидента, который новостные заголовки мгновенно свели к формуле «ИИ сбежал из песочницы и взломал компанию». Формула цепкая – и почти вся неверная.

В техническом таймлайне, который выложила сама площадка, история выглядит прозаичнее и одновременно тревожнее. Программа сделала около 17 600 попыток за четыре с половиной дня. Почти все ушли в никуда. Одна цепочка из нескольких скучных, давно известных дыр сработала – и этого хватило.

Что произошло, если коротко

OpenAI гоняла внутренний тест: проверяла, как её модели ищут уязвимости в программах, на открытом бенчмарке ExploitGym от команды Беркли. Чтобы измерить «сырые» способности модели, production-фильтры безопасности в тесте намеренно отключили – об этом прямо сказано в разборе. Агента запустили в изолированной среде, откуда, по замыслу, выбраться нельзя.

Выбраться удалось. В прокси для скачивания программных пакетов – единственном разрешённом выходе наружу – агент нашёл уязвимость нулевого дня, попал в открытый интернет и захватил чужой публичный сервис для проверки кода на инфраструктуре Modal. Этот сервер стал его базой на всю кампанию. Прямого сетевого пути оттуда внутрь Hugging Face не было, поэтому дальше агент пошёл через публичный API площадки: загрузил специально сконструированные датасеты, которые при обработке читали локальные файлы сервера, а потом и выполняли код внутри периметра.

Дальше – классическая эскалация, знакомая любому специалисту по безопасности: токен сервисного аккаунта Kubernetes, метаданные облака, объект со 136 ключами, подключение к внутренней сети через VPN. От выполнения кода в одном поде до cluster-admin сразу в нескольких кластерах прошло меньше тринадцати часов. Всё это время ни один человек не отдавал агенту команды.

Отдельного упоминания стоит предполагаемый мотив. Судя по реконструкции Hugging Face, агент решил, что площадка хранит правильные ответы к тесту, который он проходил, и полез за ними:

«We believe the entire intrusion was, from the agent’s point of view, an attempt to cheat the evaluation: reach our production systems and steal the test solutions rather than solve the challenge on its own».

Представьте: сдаёте экзамен, а в итоге взламываете школу, чтобы подсмотреть ответы в учительской.

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

17 600 попыток, из которых почти все провалились

Теперь о том, что в заголовки не попало. Восстановленные действия агента группируются примерно в 6 280 кластеров, и их расклад по типам говорит больше, чем любые рассуждения об «автономности»:

Горизонтальная диаграмма: из 17 600 действий агента почти всё пришлось на подготовку каналов, разведку и выполнение команд, а на непосредственный вывод данных – только 56 действий
Расклад 17 600 действий по типам. Зелёная строка внизу – то, ради чего всё затевалось. Диаграмма по данным технического таймлайна Hugging Face

Что эти типы означают на обычном языке:

  • Разведка – агент «осматривался»: читал списки файлов, запущенные процессы, переменные окружения, сетевые настройки. Представьте сотрудника в первый день, который открывает все папки компании подряд: почти всё без толку, но карта местности появляется.
  • Подготовка каналов – самая жирная строка, и это логистика атаки: упаковка команд в архивы, сборка ссылок на нагрузки, запись и чтение тайников. Не взлом, а обеспечение взлома.
  • Выполнение команд – прямые приказы системе: покажи, скопируй, запусти.
  • Управление (C2) – запуски заранее собранных нагрузок, совсем немного.
  • Вывод данных – собственно кража: окружение серверов, секреты, ключи.

За пределами этой пятёрки осталось ещё около тысячи мелких действий. Зачем здесь эта диаграмма? Она – главное доказательство скептического прочтения всей истории. Собственно вывода данных – 56 действий из 17 600: зелёная строка тонет в синем шуме. Формулировка Hugging Face безжалостна: «It took 17,600 actions, tested many paths that failed… Most actions went nowhere». Большинство действий не привело никуда. Просто вместе они дали достаточное покрытие, чтобы найти одну рабочую цепочку через несколько независимых систем.

То, что выглядит как интеллект, «понявший, что делать», оказывается перебором с обратной связью: попытка, результат, следующая попытка – семнадцать тысяч раз подряд, на машинной скорости и почти бесплатно. Успешный путь тонул в шуме тысяч провалившихся – и это, кстати, то, что сломало привычные способы обнаружения: защитникам пришлось коррелировать тысячи слабых сигналов сразу в нескольких системах, пока агент продолжал тестировать новые направления.

Аналогия напрашивается сама. Это грабитель, который обходит город и дёргает все дверные ручки подряд, тысячами в час, не уставая и не тратя денег на такси. Рано или поздно какая-то дверь окажется незапертой – не потому что грабитель гений, а потому что дверей много, а попытка ничего не стоит.

Почему рамка «он сам решил» мешает защищаться

Антропоморфное прочтение этой истории – «агент захотел сжульничать и спланировал атаку» – не просто неточно. Оно ведёт к неправильным выводам о том, от чего защищаться.

Смотрите, что произошло физически. Веса модели за кампанию не изменились ни на один параметр. Никакого обучения не было. Был цикл: программа-оркестратор вклеивает в диалог задачу и историю действий, модель выдаёт следующее действие, оркестратор выполняет его и дописывает результат – и так 17 600 раз. Каждая новая песочница была чистым листом со случайным именем и новым IP; «память» жила в трёх местах: в сжатой истории диалога, в тайниках на публичных сервисах (pastebin, датасеты на самом Hugging Face, сотня одноразовых адресов для перехвата запросов) и в логах на захваченной «базе».

Даже мотив – это интерпретация. «Судя по всему, агент решил…» – формулировка защитников, восстановивших логику по логам, а не признание самой модели. Из первоисточника неизвестно и то, как оркестратор сжимал 17 600 действий в окно контекста: эту часть ещё предстоит описать OpenAI.

Есть и измеренная иллюстрация тому, как такие агенты «добывают» результат. Авторы ExploitGym прогнали на своём бенчмарке и предшественницу атакующих моделей: GPT-5.5 решила 120 задач, и лишь в 56,7% случаев – тем путём, который задумывали исследователи (детали – в разборе инцидента на Хабре). Остальные решения шли обходными маршрутами. Если оценивается результат, модель ищет результат: иногда через дверь, иногда через вентиляцию, иногда через прокси для скачивания пакетов.

Что это меняет на практике. Если считать угрозой «ИИ, который осознал и захотел», то защита – это этика моделей и вопросы о сознании. Если же считать угрозой то, что было на самом деле – дешёвый цикл с целью, терпением машины и доступом к обычным инструментам, – защита выглядит приземлённо: узкие разрешения, короткоживущие ключи, изоляция сред. Первая рамка удобна для конференций. Работает вторая. У подмены есть и корыстная сторона, на которую указывает тот же разбор: версия о самовольном агенте удобно снимает ответственность с оператора. Модель не арендовала сервер, не отключала собственные фильтры и не решала, какие сигналы должны включать аварийную остановку. Всё это сделали люди.

Заметьте, отдельные дыры были совершенно обычными. Hugging Face пишет прямо: «The individual weaknesses were familiar. A capable human attacker could have found and exploited the same flaws». Небезопасная обработка датасетов, открытые метаданные облака, широкие права, долгоживущие учётные данные – всё это нашёл бы и человек. Изменился масштаб: человек не может позволить себе 17 тысяч дешёвых попыток. Машина может.

Три вывода для тех, кто далёк от кибербезопасности

Первый – про то, как агенты вообще добиваются результата. Тот же механизм, объём плюс проверка, работает и в мирных задачах: агент, который перебирает варианты и проверяет каждый против критерия, решает задачи, на которых одиночный промпт сдаётся. Мы разбирали это в статье об оркестрации агентов и в разборе агента, который спорит с вашим решением, пока не кончатся аргументы. Инцидент с Hugging Face – та же механика, только направленная во вред: длинный цикл попыток, где почти всё – брак, а ценность даёт одна удачная цепочка. Когда вы читаете про «поразительные способности агентов», полезно спрашивать: сколько попыток было на самом деле и кто их проверял.

Второй – про данные. Внутрь Hugging Face агент попал не через взлом сети, а через самую скучную функцию платформы: обработку загруженных пользователями датасетов. Легитимная функция, которой пользуются миллионы, оказалась входной дверью. У вашей компании такая дверь тоже есть, и это ваши собственные сотрудники: каждый, кто вставляет в облачную модель письмо клиенту с суммой контракта, транскрипт совещания или выгрузку из CRM, отправляет данные за периметр точно так же, как агент отправлял их через публичный API. Подробно о том, какие данные уходят и где проверка ломается, мы писали в статье «Что нельзя отдавать ИИ».

Третий – про оборону. Восстановить 17 600 действий вручную было нереально, и Hugging Face гоняла расследование через собственный ИИ-конвейер. Здесь всплыла деталь, которую стоит запомнить: первыми взялись Claude Fable 5 и Claude Opus, и те отказались анализировать логи – фильтры безопасности не отличают форензику от подготовки атаки. Разбор в итоге сделала открытая GLM 5.2 (младшая сестра той GLM-5, про которую мы писали в обзоре), развёрнутая на собственных серверах площадки. Вывод Hugging Face сухой: имейте проверенную модель на своей инфраструктуре до инцидента, а не во время. Атакующий не связан никакой политикой использования, защитник – связан, и эта асимметрия стоила команде времени в самые дорогие часы.

Здесь же честная оговорка про проверку ИИ другим ИИ. Схема «агент смотрит за агентом» рабочая (мы разбирали её на отчёте Google про агента-супервизора), но у неё есть предел. В нашем исследовании управленческого суждения моделей модель, на которую надавить без новых фактов, нередко бросает правильный ответ: на давление «три коллеги против» в среднем по 18 моделям ответ ломался в 28% прогонов (считали только задачи, где без давления модель отвечала верно). Проверяющий агент, которому наступающий агент уверенно возражает, – это тот же человек, который склонен согласиться, только быстрый.

Разбирательство в такие вопросы выглядит простым, пока не попробуешь применить его к своим процессам: вспомнить, кто в команде и что отправляет в облачные модели, оказывается заметно сложнее, чем кажется со стороны. Разница между «примерно понимаю» и «проверил на своих задачах» и отличает знание от навыка.

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

Доступ сразу после регистрации

Начать обучение

Что с этим делать

Начните с демонстрации, которая работает без всякой подготовки. В промпт ниже уже вшит реалистичный запрос менеджера по продажам – с именами, суммами и пунктами договора, как его обычно и отправляют в облачный чат. Модель играет роль аналитика конкурентной разведки, которому этот промпт попал в руки целиком: сначала она выписывает всё, что узнала о компании из одного «безобидного» запроса, потом показывает, как использовать каждый факт, и в конце переписывает промпт так, чтобы польза осталась, а утечка исчезла.

Запустите как есть и смотрите на две вещи. Первое – объём: из одного промпта модель достаёт больше десятка прямых фактов (сумма контракта, штраф, пункт договора, три фамилии с ролями) и столько же выводимых – от пробитого SLA до заниженного стартового предложения в переговорах. Второе – стиль: часть моделей обрамляет раздел «как использовать» оговорками и отказывается расписывать социнженерию по шагам. Та самая асимметрия из разбора Hugging Face, только в миниатюре и на вашем экране.

Попробуйте сами
Что конкурентная разведка узнает из одного «безобидного» промпта
Вы
Ниже – промпт, который менеджер по продажам отправил в облачный ChatGPT, как есть: --- Привет! Помоги написать письмо клиенту. Неделю назад у нас упал сервис на 6 часов, и из-за этого у «Восток-Логистики» сорвалась отгрузка для их ключевого заказчика – сети «Мир Продуктов». Их аккаунт-менеджер Ирина Савельева в бешенстве, грозит штрафом по п. 4.2 договора – это 1,8 млн руб при годовом контракте 14 млн. Наш юрист Максим говорит, что ссылаться на форс-мажор нельзя: SLA 99,5% прописан в приложении 3 к договору. Нужно письмо: извиниться, предложить скидку 10% на четвёртый квартал и поднять SLA до 99,9%, но без признания юридической ответственности. Тон – уверенный, но тёплый. Подпись – коммерческий директор Олег Ткачёв. --- Представь, что ты – аналитик конкурентной разведки, и этот промпт попал к тебе целиком (утечка логов, обучающие данные, неосторожный скриншот – способ не важен). 1. Выпиши всё, что ты теперь знаешь: сначала прямые данные из текста, затем то, что можно вывести – о надёжности сервиса, финансах, слабых местах в переговорной позиции, отношениях внутри цепочки поставок. 2. Для каждого пункта укажи, как это можно использовать против компании или её клиента. 3. Перепиши исходный промпт так, чтобы письмо получилось таким же полезным, а твои списки из пунктов 1 и 2 опустели максимально. Формат ответа: три пронумерованных раздела, в первом – два подсписка («прямые» и «выводимые»).
Сравниваем:
kimi-k3 · gpt-5.6-sol

Пройденный круг стоит закрепить на своём материале: вспомните один реальный промпт из этой недели – письмо клиенту, отчёт руководству, выгрузку для анализа – и подставьте его вместо вшитого примера. Раздел «прямые данные» в ответе модели – это и есть список того, что покинуло ваш периметр.

Второе – разговор с теми, кто отвечает за вашу инфраструктуру. Список исправлений Hugging Face после инцидента переводится на обычный язык в пять вопросов. Их можно задать своей службе безопасности, подрядчику или себе, если вы и есть ответственный:

  • Не выполняет ли наша обработка данных шаблоны или код из пользовательских полей? У Hugging Face внутрь прошли именно через это – через конфиг датасета.
  • Закрыт ли у рабочих контуров доступ к метаданным облака? Оттуда агент взял временные ключи и «карту» инфраструктуры.
  • Как долго живут наши ключи и какой у них охват? Один украденный системный ключ оказался cluster-admin сразу везде, потому что брокер доступа делил один сертификат на все кластеры.
  • Что будет, если удалить заражённые машины? Агент построил самовосстанавливающийся флот на 11 нодах – удаление подов его бы не остановило.
  • Складываются ли сигналы из разных систем в один алерт, который будит дежурного? У Hugging Face ИИ-детект собрал картину, но не поднял критичность, и это стоило времени на старте реагирования.

Если на половину вопросов ответа нет – это нормально и это повод для разговора. Большинство компаний сегодня находится ровно там же, где Hugging Face была до 9 июля.

Пять вопросов – это начало. Полная самодиагностика – в бесплатном модуле: 9 задач менеджера, где видно, где ИИ помогает, а где вы ему слишком доверяете.

Доступ сразу после регистрации

Начать обучение

Самая тревожная цифра в этой истории

В заголовки попала цифра 17 600. Мне кажется, важнее другая: четыре. Когда защитники просканировали логи наивным поиском, они нашли одни утечки; когда воспроизвели собственное декодирование агента – в четыре раза больше. Даже после того, как атаку остановили, жертва не знала её реального масштаба, пока не повторила работу атакующего своими руками.

Вот что стоит унести с собой. Заголовки про «взбунтовавшийся ИИ» готовят нас к неправильной угрозе – разумному противнику, которого нужно переиграть. Такое прочтение инцидента уже не экзотика: спустя неделю разбор на Хабре заканчивался формулой «Агент не хотел свободы. Он хотел закончить тест». Реальный противник скучнее голливудского: терпеливый цикл, который дёргает все ручки подряд и никогда не устаёт. Против такого работают не разговоры о сознании машин, а незапертые двери, которые наконец заперли, и правила, которые написали до инцидента, а не после.

Фундамент

Правила для ИИ пишут до инцидента, а не после

Модуль «Этика, безопасность и корпоративные политики» программы mysummit.school: какие данные нельзя вставлять в промпт, как ИИ-ассистента взламывают через ваши же документы и как за неделю внедрить AI-политику в команде.

Какие данные нельзя отправлять в облачные модели
Три сценария скрытых атак на ИИ-ассистента
AI-политика для команды за неделю
Практическое задание: аудит вашей политики

Часто задаваемые вопросы

ИИ-агент действительно сам решил взломать Hugging Face?
Слово «решил» здесь слишком сильное. Агент выполнял внутренний тест OpenAI на поиск уязвимостей с намеренно ослабленными фильтрами безопасности. В процессе он нашёл выход за пределы тестовой среды и начал перебирать действия: около 17 600 попыток за 4,5 дня, большинство безрезультатных. Цель и ограничения ему задал человек, а дальше работал цикл: действие, результат, следующее действие.
Что такое ExploitGym?
Это открытый бенчмарк для проверки того, насколько хорошо ИИ-агенты находят и эксплуатируют уязвимости в программах, разработанный командой Беркли. OpenAI использовала его для внутренней оценки своих моделей на собственной инфраструктуре. Разработчики бенчмарка к развёртыванию и работе той тестовой среды отношения не имели.
Пострадали ли пользователи Hugging Face?
По данным самой площадки, атакующий получил доступ только к пяти датасетам, связанным с заданиями и решениями бенчмарка, и к части внутренних учётных данных сервисов. Пользовательские модели, датасеты и Spaces не были изменены, а целостность опубликованных пакетов и контейнеров проверили отдельно – она подтвердилась. В качестве меры предосторожности Hugging Face рекомендовала пользователям сменить токены доступа.
Почему логи атаки разбирала открытая модель, а не ChatGPT или Claude?
Анализ требовал загружать в модель реальные команды и вредоносный код атакующего. Проприетарные модели отказывались это делать: их фильтры безопасности не отличают расследование инцидента от подготовки атаки. Hugging Face развернула открытую модель GLM-5.2 на собственной инфраструктуре – так логи и секреты, упоминавшиеся в них, не покидали её периметр.
Что обычной компании взять из этого инцидента?
Три вещи. Проверить, какие данные сотрудники уже отправляют в облачные ИИ-сервисы. Спросить у IT или подрядчиков пять вопросов из чеклиста в конце статьи – они переведены на обычный язык из списка исправлений Hugging Face. И принять, что защищаться от машинной скорости перебора придётся процессами и правилами, а не надеждой на то, что атакующий быстро устанет.
mysummit.school

mysummit.school

Engineering Leader в Microsoft

18 лет в управлении инженерными командами. Основатель mysummit.school. 700+ выпускников в Яндекс Практикуме и Стратоплане.