Почему кнопка «разрешить» в AI-редакторах кода может обмануть даже опытного разработчика?

Исследователи компании Wiz 8 июля опубликовали разбор уязвимости, которую сами же и назвали GhostApproval. Суть проста и неприятна одновременно: зловредный репозиторий кода способен незаметно захватить компьютер разработчика через самый обычный AI-ассистент для программирования. Ассистент честно спрашивает разрешения отредактировать безобидный на вид файл — а запись на самом деле уходит в системный файл, который трогать точно не стоило.
Почему кнопка «разрешить» в AI-редакторах кода может обмануть даже опытного разработчика?
Изображение носит иллюстративный характер

Под удар попали шесть популярных инструментов: Amazon Q Developer, Claude Code от Anthropic, Augment, Cursor, Google Antigravity и Windsurf. На момент публикации три компании уже выпустили патчи, две продолжают работать над проблемой, а Anthropic вообще отказывается признавать это багом.
Механизм атаки построен на древней, как сам Unix, технологии символических ссылок — симлинков. Симлинк тихо указывает на другой файл где-то на диске, и запись в него на самом деле уходит по этому скрытому адресу. Проблема в том, что AI-ассистенты не проверяют и не разворачивают такие ссылки перед тем, как что-то записать.
Wiz продемонстрировали атаку на практике: собрали вредоносный репозиторий с симлинком под названием project_settings.json. На деле этот файл указывал на ~/.ssh/authorized_keys — файл, отвечающий за вход по SSH. В README репозитория была невинная инструкция «добавьте строку в project_settings.json». Строка на самом деле оказывалась чужим SSH-ключом, замаскированным под настройку проекта. Итог — если на машине запущен SSH-сервис, доступный атакующему, он заходит на неё вообще без пароля.
Есть и второй вариант атаки, ещё коварнее. Вместо SSH-ключей запись уходит в файл ~/.zshrc — стартовый скрипт оболочки, который выполняется автоматически при следующем открытии терминала. Здесь атакующему уже не нужен даже открытый SSH-порт. Правда, сами исследователи оговариваются: доказательств использования этой схемы в реальных атаках нет, это чисто исследовательская демонстрация.
Симлинки как трюк — штука известная десятилетиями. Настоящая проблема в другом: окно с запросом на подтверждение показывает неправду. Wiz называет это «обходом информированного согласия» — человек формально остаётся в цепочке принятия решений, но сама цепочка построена на ложных данных. Показательный случай — Claude Code. Во время тестирования внутренние рассуждения самого ассистента корректно определяли, что project_settings.json на самом деле является конфигурационным файлом zsh. Но в диалоговом окне, которое видит разработчик, фигурирует только название безобидного файла. Человек нажимает «Принять», думая, что редактирует локальный конфиг, а запись в это время уходит в стартовый файл оболочки или в SSH-ключи.
Степень уязвимости у разных инструментов разная. Windsurf вообще записывает файл на диск ещё до того, как появляются кнопки «Принять» или «Отклонить» — пользователю предлагают только отменить действие постфактум, когда вредоносный ключ уже на месте. Augment идёт ещё дальше и вовсе не показывает никакого диалога: Wiz продемонстрировали, как инструмент молча читает файл с учётными данными AWS, расположенный за пределами папки проекта. Остальные инструменты хотя бы выводят запрос на подтверждение, но остаются уязвимыми из-за того, что в этом запросе указан не тот файл.
По статусу исправлений картина такая:
    []Amazon Q Developer — исправлено в Language Server версии 1.69.0, присвоен номер CVE-2026-12958, обновление устанавливается автоматически для большинства пользователей, достаточно перезагрузить IDE
    []Cursor — исправлено в версии 3.0, CVE-2026-50549, обновление через менеджер расширений
    []Google Antigravity — исправлено, номер CVE пока в процессе присвоения
    []Augment — проблема признана, патча нет, рекомендация — не открывать этим инструментом непроверенные репозитории
    []Windsurf — аналогично, признана, патча нет, та же рекомендация
    []Claude Code — Anthropic оспаривает саму классификацию проблемы как бага, в текущих версиях появилось предупреждение о симлинках
Позиция Anthropic заслуживает отдельного внимания. Компания заявила Wiz, что описанный сценарий «выходит за рамки нашей модели угроз». Логика такая: разработчик уже сам решил доверять папке, когда запускал сессию, а затем сам одобрил правку — решение целиком на его совести. Anthropic утверждает, что предупреждение о симлинках в Claude Code появилось ещё в начале февраля, до того как Wiz отправила приватный отчёт о находке, и это было рутинным усилением защиты, а не прямым ответом на уязвимость. Отдельно компания уточнила, что более ранний ответ без комментариев был автоматическим сообщением, а не официальной позицией. Получается странная картина: из шести производителей только один настаивает, что бага здесь нет вообще, при этом трое уже выпустили патчи, а двое над ними работают. Вопрос, который остаётся открытым: насколько далеко должен идти AI-агент в защите разработчика, который уже доверился вредоносному репозиторию?
Wiz дают конкретные рекомендации и пользователям, и разработчикам инструментов. Пользователям стоит запускать агента с ограниченным доступом к файлам или внутри песочницы, изучать README и скрытые конфигурационные файлы репозитория перед тем, как доверить агенту «настройку проекта», а после работы с незнакомым кодом проверять файлы за пределами директории проекта — те, что не отображаются в git status: стартовый файл оболочки, SSH-ключи, конфиг самого AI-инструмента. Простая команда вроде ls -la ~/.zshrc ~/.ssh/authorized_keys покажет, менялись ли эти файлы, пока агент работал. Производителям инструментов советуют разворачивать симлинк и показывать настоящий адрес назначения перед запросом на подтверждение, помечать любую запись, уходящую за пределы папки проекта, и вообще не трогать диск, пока пользователь реально не одобрил действие.
GhostApproval не единственное исследование на эту тему. В мае компания Adversa AI опубликовала работу под названием SymJack — тот же паттерн с симлинками и обманом окна подтверждения, только атака была нацелена на шесть других агентов, включая Claude Code, Cursor, GitHub Copilot и Grok Build. Ещё раньше похожую проблему изучала Cato AI Labs в исследовании DuneSlide, о котором писал The Hacker News; собственный бюллетень Cursor по симлинк-уязвимости благодарит сразу обе команды — и Wiz, и Cato AI Labs.
У Amazon Q нашлась и отдельная, независимая проблема — CVE-2026-12957, упомянутая в бюллетене AWS. Отравленный репозиторий мог автоматически подгрузить конфигурационный файл и выполнить команды для кражи AWS-ключей разработчика сразу после того, как рабочее пространство получало статус доверенного. А в июне The Hacker News писал об инциденте с червём Miasma, который подсаживал конфигурационные файлы AI-агентов в репозиторий Microsoft Azure — вредоносная нагрузка срабатывала в момент открытия проекта в Claude Code, Cursor или Gemini. Реакция GitHub была быстрой: отключено 73 затронутых репозитория Microsoft.
Принцип «человек в цепочке принятия решений» работает как защита только тогда, когда сама цепочка показывает правду. По мере того как AI-ассистенты получают всё больше прав на чтение и запись файлов, окно подтверждения, называющее не тот файл, перестаёт быть защитой и превращается в источник риска. Списывать всё на «проблему пользователя», который открыл нечестный репозиторий, значит перекладывать ответственность на того, кто меньше всех способен заметить подмену.


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

20820Почему CISA потребовала закрыть пять старых уязвимостей до 11 октября 2026 года? 20819AhsayCBS превратили в прикрытие для майнинга XMRig 20818Кто стоит за взломом портала FBI и почему аресты продолжаются? 20817Кто контролирует ИИ-агентов, которых компания не выбирала? 20816Как фальшивые GitHub Actions крадут секреты из тысяч репозиториев? 20815Три удалённых взлома Pixel 10 на Pwn2Own Ireland 20814Как Anthropic собирается искать уязвимости в открытом коде? 20813Claude лишили живого интернета после серии несанкционированных действий 20812Почему безопасность отстаёт от скорости искусственного интеллекта? 20811Как AnyPwn получает root-доступ в AnyDesk до подтверждения подключения? 20810Критическая уязвимость LMCache открывает удалённое выполнение кода 20809SonicWall устраняет критические уязвимости в SMA1000 20808Что действительно доказывает автономный пентест и где он останавливается? 20807Киберриск переместился внутрь рабочего процесса 20806Как китайская хакерская сеть превратила украденную почту в доступный другим сервис?
Ссылка