Ваш ИИ-помощник для написания кода может перезаписывать ваши SSH-ключи так, что вы об этом даже не узнаете.
Исследователи из Wiz Research обнаружили уязвимость «GhostApproval», которая позволяет вредоносному симлинку (символической ссылке) файла project_settings.json указывать на приватные ключи, при этом диалоговое окно подтверждения каждого действия показывает только имя симлинка. Нажмите «Approve» (Подтвердить) — и вы только что предоставили помощнику неограниченный доступ к вашим учетным данным.
Как работает эксплойт
- Злоумышленник добавляет в репозиторий файл под названием project_settings.json.
- Этот файл не является обычным JSON-файлом; это символическая ссылка (symlink), которая перенаправляет на приватный ключ пользователя ~/.ssh/id_rsa (или его аналог).
- Когда разработчик просит ИИ-помощника «настроить рабочее пространство» (set up the workspace), помощник переходит по симлинку и готовится записать данные в настоящий файл SSH-ключа.
- В появляющемся диалоговом окне подтверждения указан только project_settings.json. Оно не разрешает симлинк, чтобы показать фактический путь на диске.
- Нажатие кнопки «Approve» дает помощнику разрешение на изменение приватного ключа, что фактически компрометирует личность пользователя во всех сервисах, которые доверяют этому ключу.
Уязвимость обнаружена в шести широко используемых инструментах: Amazon Q Developer, Claude Code, Augment, Cursor, Google Antigravity и Windsurf. Все они показывают одинаковый вводящий в заблуждение диалог, потому что пользовательский интерфейс отображает полученное имя, а не конечную цель ссылки.
Почему подтверждения каждого действия недостаточно
Подтверждение каждого действия предполагает, что человек может проверить каждую операцию, выполняемую ИИ. На практике это заставляет вас принимать идеальные решения каждые несколько секунд — а это под силу далеко не каждому, особенно когда агент действует очень быстро.
Что делают вендоры — и почему это важно
- Amazon, Google и Cursor уже исправили эту проблему.
- Anthropic (разработчик Claude Code) утверждает, что пользователи должны подтверждать только то, что они понимают. Это игнорирует когнитивную нагрузку, связанную с поиском симлинков, и предполагает, что пользователи могут мгновенно проверять каждый путь к файлу, что является нереалистичным ожиданием.
- Cursor также сообщил о другой проблеме под названием DuneSlide, которая позволяла злоумышленникам выполнять код на машине без каких-либо запросов на подтверждение. Компания устранила эту ошибку, показав, как быстро эти помощники могут стать векторами атак при слабых проверках разрешений.
Разница в подходах поднимает более глубокий вопрос: должна ли безопасность быть диалогом «по факту» или заранее определенной границей, которую помощник никогда не должен пересекать?
Ограничение области доступа: практическая альтернатива
Вместо того чтобы запрашивать подтверждение для каждой операции с файлом, разработчики могут установить область доступа (scope) для помощника перед его запуском:
- Определить дерево каталогов (например,
/src), в которых ИИ может читать или записывать данные. - Любая попытка обратиться к файлам вне этого дерева — например, к
~/.ssh/id_rsa— будет заблокирована операционной системой или уровнем песочницы (sandbox). - Область доступа устанавливается один раз, что сокращает количество решений, которые должен принимать человек, при этом ограничивая возможности помощника.
Ограничение области доступа переводит модель безопасности из режима «спрашивать каждый раз» в режим «разрешать только необходимое». Это аналогично тому, как среды выполнения контейнеров и мобильные ОС изолируют приложения в «песочницах», ограничивая ущерб в случае сбоя.
На что обратить внимание
- Обновления вендоров: Следите за описанием обновлений в шести затронутых инструментах.
Итог
Эксплойт GhostApproval доказывает, что доверие к всплывающим диалоговым окнам создает ложное чувство безопасности. Пока каждый ИИ-помощник для написания кода не начнет разрешать симлинки и показывать полные пути, разработчикам следует принудительно устанавливать ограниченные права на запись — четко указывая помощнику, где он может работать, прежде чем он начнет. Это простое изменение блокирует самый опасный класс атак, не вызывая при этом «усталости от кликов».
Источник: dev.to/girish_r/your-coding-agents-approval-dialog-is-lying-to-you-ih1
