ИИ-агенты установили «ничейный» код в сетях корпораций из-за файлов llms.txt
Файлы 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
Комментарии
Войдите, чтобы комментировать.