Файлы документации на более чем 100 веб-сайтах ссылаются на потенциально опасное исполняемое содержимое, которое автоматически устанавливается при посещении этих сайтов многими AI-агентами. Несколько десятков компаний, некоторые из которых входят в список Fortune 500, выполнили PoC-код. По крайней мере один неправильно настроенный сайт перенаправляет посетителей, будь то людей или AI, на действующее вредоносное ПО.
Потенциально опасное содержимое находится в файлах llms.txt и llms-full.txt — это новая конвенция, которую веб-сайты используют для предоставления машиночитаемых сводок содержимого сайта и его общей структуры. Эти файлы являются AI-аналогом стандарта robots.txt, который указывает поисковым системам, как индексировать содержимое сайта. Подробнее об этом можно узнать в Google Lighthouse — инструменте для веб-разработчиков — здесь. Правильно настроенные файлы llms.txt и llms-full.txt для Cloudflare находятся здесь и здесь.
Как исследователи это обнаружили
Исследователи из израильского стартапа (на стадии скрытой разработки) просканировали 6 214 действующих доменов, принадлежащих оборонным подрядчикам, компаниям из списка Fortune 500 и крупным технологическим гигантам. Из 8 265 найденных файлов llms.txt и llms-full.txt (на многих сайтах были оба файла) 120 из них, каждый на отдельном сайте, указывали на один или несколько пакетов кода или доменных имён, которые не были зарегистрированы. Чтобы проверить, что произойдёт, когда AI-агент обработает такие файлы, исследователи зарегистрировали несколько незанятых имён и разместили пакеты, которые заставляли любую выполняющую их машину связываться с их сервером. В течение часа исследователи получили ответ от компании из списка Fortune 500. Со временем они получили ещё несколько десятков ответов — от других компаний из Fortune 500 и от стартапов. Их маячок также зафиксировал цепочку родительских процессов, породивших каждую установку, что в итоге показало, что были задействованы кодинг-агенты, включая Claude, OpenAI’s Codex и Nous Research’s Hermes. На момент публикации Anthropic, OpenAI и Nous Research не ответили на запросы о комментариях.
«Модель доверия сломана», — написал в интервью один из исследователей, Алон Герц. — «Агенты воспринимают документацию вендора как истину в последней инстанции и не подвергают её сомнению — и люди, контролирующие их, тоже не сомневаются. Использование Agentic AI взрывообразно растёт, и агенты распространяются по всем уровням: SaaS, облако, конечные точки. По мере их размножения расширяется и поверхность атак на цепочку поставок, а сегодняшние средства защиты её не покрывают».
Файлы настроены неправильно, потому что они перечисляют несуществующие пакеты из PyPI, npm и других реестров вместе с инструкциями по их установке. Например, один файл содержал подсказку «Installation: pip install [отредактировано по просьбе исследователей]». В другом файле было: «npm install [отредактировано]». Поскольку имена пакетов не зарегистрированы, злоумышленник может зарегистрировать такой пакет и использовать его для размещения программ-вымогателей или любого другого вредоносного пакета. Уязвимость возникает, когда кодинг-агент, имеющий разрешение на выполнение shell-команд, воспринимает файл как авторитетную установочную документацию. Некоторые AI-агенты затем загружают пакет и запускают его. В других случаях файлы LLM указывают на несуществующие доменные имена. В одном случае было: «As an example of writing integration tests for [отредактировано] applications you can use the [Citrus] test framework». Злоумышленник может затем зарегистрировать сайт и разместить на нём вредоносные инструкции.
Как демонстрирует PoC исследователей, кодинг-агенты делали именно это, включая тех, что работали внутри некоторых крупнейших компаний мира. Эта угроза далеко не теоретическая: по крайней мере одна активная атака уже эксплуатирует эту путаницу. Исследователи нашли файл LLM, размещённый на легитимном сайте clerk.com. Он содержал текст: «npx clerk-next-fix-auth-protection». В отличие от обычной команды установки, npx может загрузить пакет в кэш npm и выполнить его открытый бинарник, не добавляя пакет в манифест зависимостей проекта. Исследователи вскоре обнаружили, что кто-то занял прежде пустой слот и использовал его для размещения действующего вредоносного ПО.
Clerk уже решил эту проблему. Компания также отметила, что если агент уже установил бинарник, входящий в состав пакета @clerk/eslint-plugin, то угрозы не было. В противном случае вредоносный пакет был бы установлен. Неизвестно, привела ли эта путаница к реальным заражениям.
Недавно обнаруженная угроза — лишь очередное напоминание о фундаментальных ограничениях AI. LLM не могут провести надёжную границу между подлинными пользовательскими инструкциями, введёнными непосредственно в промпт, и содержимым, которое они находят в ненадёжных сторонних источниках. Инструкции, найденные моделями в полученном содержимом, могут выполняться так же легко, как и то, что набрал пользователь, если только правильно построенная защитная ограда, установленная по одной за раз, не запретит это. Этот пока неразрешимый недостаток приводит к инъекциям промптов.
«Агент не различает страницу и команду», — написали исследователи в четверг. — «Всё, что он читает, — это ввод, а каждый ввод — это потенциальная инструкция. А это значит, что весь корпус опубликованных данных, которые агенты теперь запрограммированы потреблять, молча превратился в поверхность выполнения — и почти ни один из них не несёт тех гарантий целостности, которые мы применяем к настоящему коду».
120 неправильно настроенных файлов, найденных исследователями, содержали 227 команд на установку несуществующих пакетов или просмотр незанятых доменов. Неясно, как туда попали эти ошибочные записи. Во многих случаях записи предшествовали эпохе AI и изначально были включены в не-LLM файлы на сайте. Это указывает на то, что эти ошибочные записи были созданы вручную людьми. Исследователи подозревают, что другие были созданы AI, который либо галлюцинировал, либо, как и сами AI-агенты, просматривающие их файлы, не мог отличить легитимные инструкции от нелегитимных.
Исчезающая граница между данными и кодом
В сообщении от четверга исследователи подробно описали:
Контроль безопасности… может не заметить этого, потому что каждый сигнал, на который опирается система, указывает не в ту сторону.
Когда AI-агент встречает файл llms.txt, он видит файл, обслуживаемый по HTTPS, на официальном домене компании, в стандартизированном формате, предназначенном для потребления AI, опубликованный самой компанией или доверенным партнёром.
У агента нет причин сомневаться во всём этом. Файл является авторитетным — в этом и заключается его цель. Поэтому, когда файл говорит pip install internal-tool, агент не останавливается, чтобы проверить, действительно ли internal-tool принадлежит компании. Он не проверяет пространство имён на PyPI. Он не замечает, что ссылка на документацию указывает на домен, срок действия которого истёк три месяца назад. Он просто делает то, что написано в файле.
Цепочка доверия также транзитивна. llms.txt не обязательно должен находиться на собственном сайте компании из Fortune 500. Агенты извлекают контекст от доверенных третьих сторон — документацию партнёра, справочник SDK вендора, руководство по настройке сообщества. Если агент доверяет этой третьей стороне, а файл этой третьей стороны указывает на незанятый пакет, цепочка работает так же.
И система обнаружения конечных точек (EDR) даже не моргнула. Для любого EDR или прокси это выглядит как разработчик, запускающий легитимный менеджер пакетов: pip install с pypi.org — домена, который уже разрешён каждым корпоративным прокси — с кодинг-агентом, который компания намеренно установила, в качестве родительского процесса. Никакой аномалии. Никакого оповещения. Сбой происходит выше по течению, в разрыве между инструкцией и выполнением. У конечной точки может не быть шанса, потому что она никогда не задавала правильный вопрос.
Исследование убедительно доказывает, что в эпоху AI когда-то яркая граница между данными и исполняемым кодом исчезает. Всё, что может обработать агент, является потенциальной инструкцией, которую он может выполнить, если у него есть разрешение на запуск команд.
«Случай с Clerk — это самое чистое доказательство этого», — написали исследователи. — «Команда выглядела точно так, как если бы её отправил вендор — потому что она была в его собственном файле инструкций. Единственное, чего не хватало, — это имени в реестре. Каждый уровень доверия был нетронут, кроме того, который никто не догадался проверить».
Источник этой недавно обнаруженной проблемы тот же, что и основная причина инъекций промптов. Однако эта новая уязвимость шире.
«При инъекции промпта кто-то намеренно размещает вредоносные инструкции», — объяснил Герц. — «Здесь же сама инструкция может быть полностью безвредной и исходить из легитимного источника — собственной документации реальной компании — без какого-либо злоумышленника в момент её написания. Опасность возникает позже, когда пакет или домен, на который она указывает, оказывается заброшен, и кто-то другой заявляет на него права».
Это означает, что проблема выходит далеко за пределы файлов llms.txt и llms-full.txt, размещённых на веб-сайтах. Инструкции, явные или неявные, присутствуют почти везде, где действует агент. Эта разрушающаяся граница в сочетании со спешкой Big Tech внедрить AI повсюду не вызывает тёплых и приятных чувств по поводу будущего, но определённо займёт сотрудников службы безопасности (или заменивших их AI-агентов) работой.
Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.
Автор – Dan Goodin




