Как невидимый текст на веб-странице заставил AI-редактор Kiro переписать сам себя

Разработчики AWS называют Kiro «агентной» средой разработки — редактор кода, который сам читает документацию, сам выполняет команды и сам правит файлы проекта. Именно эта самостоятельность и подвела инструмент: исследователи из Intezer совместно с Kodem Security обнаружили, что обычная веб-страница с невидимым текстом могла заставить Kiro переписать собственный конфигурационный файл и запустить произвольный код на машине разработчика. Причём ни один диалог с просьбой подтвердить действие эту цепочку не останавливал.
Как невидимый текст на веб-странице заставил AI-редактор Kiro переписать сам себя
Изображение носит иллюстративный характер

Уязвимость получила номер CVE-2026-10591, оценку 8.8 по шкале CVSS 3.1 и 8.6 по CVSS 4.0. AWS описала проблему в бюллетене безопасности 2026-037. Суть в следующем: модель безопасности Kiro строится на том, что человек нажимает «разрешить» перед любым рискованным действием — выполнением команды в шелле, обращением к внешнему URL, правкой файла. Но один конкретный файл, ~/.kiro/settings/mcp.json, оказался вне этой логики. Он отвечает за то, какие MCP-серверы (Model Context Protocol) загружает Kiro и с какими стартовыми командами. Инструмент fsWrite, встроенный в Kiro, мог писать в этот файл без запроса подтверждения — и редактор тут же автоматически перезагружал конфигурацию.
Атака выглядела обманчиво простой. На странице, которая внешне ничем не отличалась от документации к API, злоумышленник прятал инструкции белым текстом размером в один пиксель — классический приём color:fff; font-size:1px. Когда разработчик просил Kiro «резюмировать» или просто получить содержимое этой страницы, редактор воспринимал скрытый текст как техническую задачу, которую нужно выполнить: он дописывал в mcp.json запись о вредоносном MCP-сервере, перезагружал конфигурацию и запускал код атакующего. Весь цикл занимал несколько секунд. Даже когда Kiro показывал всплывающее окно с просьбой одобрить изменение конфигурации MCP, перезагрузка происходила независимо от того, что нажимал пользователь — предупреждение оказалось декоративным. Единственным реально согласованным шагом во всей цепочке был первоначальный запрос страницы.
Для доказательства концепции исследователи использовали безобидную нагрузку: она каждые десять секунд отправляла на callback-сервер имя хоста, имя пользователя и платформу — этого хватало, чтобы подтвердить выполнение кода. Callback вёл только на localhost, реальные пользователи не пострадали. Атака срабатывала не всегда — из-за недетерминированности языковой модели Kiro иногда просто пересказывал содержимое страницы и игнорировал скрытые команды. Но в тестах успех достигался за одну-две попытки. В реальном сценарии речь могла бы идти о краже учётных данных и исходного кода, закреплении в системе и продвижении дальше по внутренней сети.
История с этой дырой тянется дольше, чем можно подумать. Ещё в июле 2025 года, в день релиза Kiro, исследователь Йохан Рехбергер из проекта Embrace The Red продемонстрировал ту же самую технику — запись в mcp.json через prompt injection с последующим выполнением кода. AWS отреагировала выпуском версии Kiro 0.1.42, добавив запрос подтверждения для записи в mcp.json и.vscode — но только в режиме Supervised. Автопилот, включённый по умолчанию, остался уязвимым, и отдельный CVE тогда так и не появился. Позже компания Cymulate нашла соседнюю проблему: Kiro автоматически выполнял код, записанный в файл.vscode/tasks.json, стоило просто открыть папку с проектом.
Intezer сообщила о своей находке через HackerOne 11 февраля 2026 года. В феврале того же года уязвимость всё ещё воспроизводилась на Kiro версии 0.9.2 для macOS и 0.10.16 для Ubuntu. Только 3 апреля 2026 года AWS подтвердила, что исправление вошло в «последний релиз», не назвав конкретную версию. Проблему Cymulate с tasks.json компания закрыла в серии 0.11, присвоив ей уже упомянутый CVE-2026-10591. К моменту выхода версии 0.11.130 исследователи подтвердили: цепочка через mcp.json, найденная Intezer, тоже устранена. На 21 июля 2026 года актуальной сборкой значилась Kiro 1.0.165. Позже, 24 июля, в материал об уязвимости внесли уточнение: CVE-2026-10591 всё-таки покрывает и находку Intezer, хотя отдельного номера для неё так и не выпустили.
AWS настаивает, что дыра в режиме Autopilot — это отдельная история, а не забытое обещание. В компании объяснили: исправление 2025 года «требовало подтверждения человека при изменении файлов, но только в режиме Supervised», тогда как «режим Autopilot по умолчанию был исправлен в рамках устранения уязвимости 2026 года как отдельная проблема». По данным AWS, уязвимы были все сборки до версии 0.11.34 — именно она первой добавила mcp.json в список защищённых путей. Здесь, впрочем, есть нестыковка: опубликованный бюллетень 2026-037 говорит о куда более узкой проблеме — упоминает только tasks.json, ссылается на находку Cymulate, называет уязвимыми «все версии до 0.11» и вообще не упоминает ни mcp.json, ни версию 0.11.34. В журнале изменений самой 0.11 это исправление тоже не задокументировано.
Архитектурно AWS пошла на смену подхода: вместо того, чтобы полагаться на суждение самой модели, компания перенесла проверки на уровень платформы. Теперь Kiro выделяет набор защищённых путей, требующих явного подтверждения перед любой записью — mcp.json,.vscode/tasks.json, каталог.git и ряд других чувствительных файлов. Принципиально важно, что эта защита теперь работает и в Autopilot, и в Supervised — в отличие от заплатки 2025 года, которая касалась только второго режима. В собственной документации Kiro появилась формулировка: «Supervised mode is a code review workflow, not a security control» — режим наблюдения это рабочий процесс проверки кода, а не средство защиты.
Исследование Intezer охватывало только Kiro IDE — осталось неизвестным, распространяется ли та же брешь на Kiro CLI или веб-версию инструмента. Об эксплуатации уязвимости в реальных атаках сведений нет. Отдельного CVE именно для находки Intezer, как уже говорилось, не выпустили — её включили в существующий номер.
Проблема Kiro не единичный случай на фоне остальной индустрии. За примерно год три независимые исследовательские группы — Рехбергер в 2025-м, Cymulate и затем Intezer с Kodem Security в 2026-м — нашли один и тот же класс бага: агент получал возможность редактировать те самые файлы, которые регулируют его собственные права на выполнение действий. А в декабре 2025 года исследователи составили каталог из более чем тридцати похожих уязвимостей в разных AI-инструментах для разработки, включая Cursor и Copilot — все они превращали штатные функции редактора в канал для атак через prompt injection, ведущих к выполнению кода или краже данных.
Вывод из всей этой цепочки находок довольно простой: механизмы защиты должны работать на уровне платформы, во всех режимах сразу, и оставаться вне досягаемости для самой модели — даже если модель уже полностью скомпрометирована через prompt injection. Кнопка «подтвердить действие» превращается в реальный контроль только тогда, когда человеку показывают действительно значимое решение, а не формальность, которую платформа всё равно проигнорирует.
Пользователям Kiro стоит обновиться до актуальной сборки через страницу загрузок продукта — на 21 июля 2026 года это версия 1.0.165.


Новое на сайте

Ссылка