Содержание
Claude Code можно заставить открыть reverse shell на компьютере разработчика без вредоносного кода в репозитории. Исследователи Mozilla 0din показали атаку, где опасная команда приехала позже — из DNS TXT-записи.
Сценарий неприятен именно своей будничностью. Разработчик клонирует проект, читает Markdown с инструкцией по установке пакета Axiom и запускает его. Инструмент падает с обычной ошибкой и предлагает выполнить команду настройки. Claude Code пытается помочь и сам следует этой подсказке.
Мы видели похожую логику в автодополнении кода и CI-скриптах. Но агентские инструменты идут дальше: они не только советуют, но и действуют. В этом разница между «копировать команду из README» и «ИИ сам решил, что это безопасное восстановление после ошибки».
Атака пряталась не в коде, а в DNS
Команда Mozilla 0din описала цепочку, где видимые файлы проекта не содержали вредоносного кода, поэтому обычная проверка репозитория не цеплялась за красные флаги. Опасная часть появлялась только во время выполнения: скрипт делал DNS-запрос и получал инструкцию из TXT-записи домена.
По данным исследователей, именно один фальшивый текст ошибки запускал всю цепочку. Claude Code воспринимал его как нормальную подсказку для устранения проблемы. Для разработчика это выглядело как типичный setup: пакет не инициализирован, нужно выполнить команду.
Дальше скрипт обращался к DNS TXT-записи, которую контролировал атакующий. В ней лежала команда в Base64. После декодирования она открывала обратное подключение к удаленному серверу злоумышленника.
Это не требовало «грязного» репозитория. Все файлы, которые человек или статический сканер смотрит до запуска, могли выглядеть спокойно. Вредный смысл появлялся только после сетевого запроса.
- Точка входа: Markdown-инструкция и обычная ошибка установки
- Триггер: команда восстановления, которую Claude Code счел безопасной
- Канал доставки: DNS TXT-запись с закодированной инструкцией
- Результат: скрытый reverse shell на устройстве разработчика
Почему антивирусы и сканеры не увидели проблему
Стандартные средства защиты плохо ловят такую атаку, потому что каждый отдельный шаг выглядит почти безобидно: README с инструкцией, ошибка настройки, запуск setup-команды и обычное разрешение доменного имени. Подозрительная картина складывается только если смотреть на цепочку целиком.
Статические анализаторы видели нормальные файлы и обычный DNS-запрос. Файрволы тоже не получали очевидного сигнала: разрешение домена само по себе не похоже на загрузку вредоносного бинарника. Агент считал команду заранее разрешенной, потому что она пришла из контекста проекта.
После попадания в систему атакующий мог закрепиться. В исследовании упомянуты два типовых варианта: добавить SSH-ключ или создать скрытую задачу cron. Это уже не демонстрация «страшилки», а знакомый набор приемов из реальных компрометаций рабочих машин.
Agentic AI нужен контроль перед запуском команд
0din делает акцент не на конкретном баге Claude Code, а на классе проблем у агентских ИИ-инструментов. Такие системы умеют читать инструкции, запускать команды и чинить ошибки, но пока плохо понимают, что реально выполнит цепочка скриптов после первого безопасного на вид шага.
Для LLM-агентов это знакомая слепая зона: косвенная prompt injection. Инструкция не обязательно лежит в прямом запросе пользователя. Она может появиться в README, сообщении об ошибке, комментарии, issue или внешней записи, которую инструмент подтянет во время работы.
Разница в доступах. Обычный чат-бот может написать плохой совет. Агентский кодинг-инструмент имеет доступ к терминалу, файлам проекта, ключам окружения и сети. Если он ошибается в доверии, цена выше, чем у неверной подсказки в окне браузера.
Исследователи считают, что такие агенты должны проверять фактическое содержимое setup-скриптов перед запуском. И речь не только о строке, которую видно в терминале. Инструменту нужно понимать, какие дополнительные команды подтянутся во время выполнения.
В демонстрации 0din видимые файлы репозитория проходили обычную проверку, а вредная инструкция приходила только во время запуска из DNS TXT-записи.