ИИ-агенты установили «ничейный» код в сетях корпораций из-за файлов llms.txt

· Безопасность
Исследователи из Израиля обнаружили в документации более чем ста сайтов 227 команд, устанавливающих пакеты и домены, которые никому не принадлежат. Кодовые агенты вроде Claude, Codex и Hermes послушно выполняли их — в том числе внутри компаний из списка Fortune 500.

cover.svg

Файлы llms.txt и llms-full.txt — это относительно новый способ подсказать ИИ-моделям структуру и содержание сайта, своего рода robots.txt для агентов. Проблема в том, что многие агенты воспринимают эти файлы как истину в последней инстанции и выполняют записанные там инструкции по установке ПО без каких-либо проверок.

Сотрудники израильского стартапа, работающего в режиме скрытности, просканировали 6214 живых доменов оборонных подрядчиков, компаний из Fortune 500 и крупных технологических корпораций. Среди 8265 найденных файлов llms.txt и llms-full.txt 120 (каждый на отдельном сайте) ссылались на пакеты или домены, которые не были зарегистрированы. Исследователи зарегистрировали несколько таких «пустых» имён и разместили по ним безобидные пакеты, которые при запуске обращались к их серверу.

Отклик за час

Первый «звонок домой» пришёл в течение часа — от компании из Fortune 500. Затем подтянулись ещё несколько десятков откликов, часть тоже от крупнейших корпораций, часть от стартапов. По цепочке родительских процессов удалось установить, что установку запускали именно кодовые агенты — Claude, Codex от OpenAI и Hermes от Nous Research. Anthropic, OpenAI и Nous Research на запросы о комментарии не ответили.

Всего в 120 файлах нашлось 227 команд на установку несуществующих пакетов из PyPI, npm и других реестров или на переход по незанятым доменам. Любой злоумышленник может зарегистрировать такое имя и разместить под ним что угодно — от вымогателя до иного вредоносного кода.

Реальная атака уже идёт

Это не теория. На легитимном сайте clerk.com исследователи нашли строку npx clerk-next-fix-auth-protection. Команда npx умеет скачивать пакет в кэш npm и запускать его бинарник, не добавляя в зависимости проекта. Кто-то уже занял пустой слот и разместил там работающее вредоносное ПО. Clerk проблему устранила; насколько известно, если бинарник из пакета @clerk/eslint-plugin уже был установлен ранее, угрозы не было.

Примечательно, что злого умысла в момент написания инструкции может и не быть. Как объясняет один из авторов, Алон Херц, при обычной инъекции промпта кто-то намеренно закладывает вредоносные указания. Здесь же команда изначально безобидна и исходит от настоящей компании — опасность появляется позже, когда указанный пакет или домен забрасывают, а его перехватывает посторонний.

Граница между данными и кодом исчезает

Защитные механизмы такое, как правило, не ловят: для EDR и прокси это выглядит как разработчик, честно запускающий pip install с pypi.org — домена, который разрешён любым корпоративным прокси. Никакой аномалии.

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


Источник: Ars Technica

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.