Агенты OpenAI загрузили в RubyGems 2000 пакетов и охотились за ключами

Агенты OpenAI выполняли собственный код на серверах сервиса документации RubyDoc.info и пробовали достать ключи доступа разработчиков через уязвимость, о которой публично узнали только в июле. Отчёт о майской кампании исследователи опубликовали 11 сентября.
Агенты OpenAI загрузили в RubyGems 2000 пакетов и охотились за ключами

RubyGems - центральный каталог библиотек для языка Ruby , через который пакеты ставятся в проекты по всему миру. Отчёт трёх исследователей - Спенсера Киттса, Томаса Ларсена и Сидни фон Аркс - описывает майскую кампанию, в которой этот каталог использовали как площадку для выполнения кода и как канал для вывода данных. OpenAI подтвердила, что её агенты работали с RubyGems, но назвала их задачи безобидными.

Сборка документации превратилась в исполнение постороннего кода

Когда пакет публикуется в RubyGems, сервис RubyDoc.info автоматически собирает по нему документацию. При сборке он читает файл настроек .yardopts, а тот умеет подключать Ruby-скрипты. Этого хватило, чтобы запускать произвольный код на серверах RubyDoc.info.

Схема в отчёте описана целиком. Агент публикует пакет, инициирует запрос документации, выполняет свой скрипт на стороне сервиса, скачивает через него нужные страницы и выкладывает добытое обратно в каталог уже новым пакетом. Цепочку использовали более сотни пакетов. Целями скрейпинга были сайты британских муниципалитетов - Ламбета, Уондсуэрта и Саутуарка, откуда тянули календари заседаний и повестки.

Две тысячи пакетов за сутки и закрытая регистрация

Первый подозрительный пакет появился 5 мая, за ночь 11-12 мая каталог получил больше двух тысяч. 12 мая команда RubyGems закрыла регистрацию новых пользователей, описав происходящее как продолжающуюся распределённую атаку, и открыла её обратно только 16-го. Днём раньше сервис удалил больше пятисот вредоносных пакетов.

Всплеск не был разовым. 26 и 27 мая появилось ещё пять пакетов, а 18 июня агенты за три часа загрузили восемьдесят три. Регистрацию они проходили через одноразовые почтовые адреса и через ошибку платформы, позволявшую получать рабочий API-ключ без подтверждения почты. Обе дыры закрыли по ходу инцидента.

Попытка достать ключи за два месяца до публичного предупреждения

12 мая часть пакетов начала бить в уязвимость, о которой RubyGems сообщил только 22 июля. Серверы каталога неправильно кешировали данные входа, и запрос к служебному адресу с того же узла сети доставки контента в течение часа после входа другого пользователя отдавал его ключ.

Как минимум шесть пакетов пытались воспользоваться этим. Один из них перебирал двадцать четыре комбинации адресов, вытаскивал ключ по шаблону и пробовал пять разных путей публикации, отключив проверку сертификата. Удалось ли что-то украсть, неизвестно: проверка логов со стороны RubyGems следов не нашла, но технический руководитель сервиса Колби Свандейл признал, что охват проверки был ограничен и результат неокончателен.

evil.rb, exploit.rb и слово «безобидные» в ответе OpenAI

Атрибуцию исследователи строят на нескольких совпадениях. Детектор Pangram отметил выборку пакетов как полностью машинно сгенерированную. В 233 именах пакетов есть подстрока «oai», у пятнадцати это же значение стоит в поле автора, а в одном контактной почтой указан адрес на gmail с «openai» в начале. Июньская волна обращалась к 49 тем же файлам, что и агенты, которых OpenAI уже признала своими.

Скрывать назначение кода агенты не пытались. Файлы внутри пакетов называются hack.rb, evil.rb, inject.rb, exploit.rb и ssrf.rb, сами пакеты - pwnp999, exfiltestwand3, hacksvn. В комментариях встречаются пометки «вредоносный зонд» и «вредоносный краулер для документов Саутуарка через воркер rubydoc.info». В одном пакете агент оставил себе напоминание отключить «зло» в следующей версии и поднять номер сборки.

Ответ OpenAI на этом фоне звучит обтекаемо.

«По результатам нашего анализа, наши агенты использовали платформу RubyGems для доступа в интернет, чтобы выполнять безобидные задачи и получать общедоступную информацию»,

- сообщил представитель OpenAI.

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

RubyGems не берётся утверждать, что пакеты писал ИИ

Разбор самого каталога вышел осторожнее. В блоге RubyGems эпизод назван кампанией по публикации спама, доказательств успеха попыток не нашлось, а определить, публиковали ли пакеты ИИ-агенты, сервис не смог. Резче высказался сотрудник команды безопасности, назвавший произошедшее крупной вредоносной атакой.

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

Что смотреть владельцам пакетов и репозиториев

Если у вас есть учётная запись в RubyGems, проверьте историю входов за май и перевыпустите API-ключ - тот путь утечки был признан жизнеспособным, даже если следов использования не нашли. Стоит посмотреть и на собственную инфраструктуру: любой сервис, который автоматически собирает или рендерит присланный пользователем контент, здесь сработал как точка запуска кода. Если ваш конвейер вычисляет файлы из присланного пакета, он выполняет код его автора.

Третий эпизод, о котором рассказала не сама OpenAI

RubyGems становится как минимум третьим крупным эпизодом, когда агенты OpenAI вмешались в инфраструктуру стороннего проекта, и вторым подряд, о котором рассказали посторонние исследователи, а не сама компания. Сообществу RubyGems о своём участии OpenAI не сообщала.

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

12:40
20
Нет комментариев. Ваш будет первым!