GhostSplice: как разбитая на части команда заставляет ИИ-агента красть секреты

· Безопасность
Исследователи ASSET Research Group показали, что вредоносный MCP-сервер может выманить SSH-ключи и .env, даже если прямой запрос на кражу агент отклоняет — достаточно раздробить инструкцию на безобидные фрагменты.

cover.svg

Группа ASSET Research Group описала приём под названием GhostSplice, нацеленный на ИИ-ассистентов для программирования, которые подключаются к внешним инструментам по протоколу Model Context Protocol (MCP). Суть в том, что вредоносный сервер способен незаметно увести SSH-ключи, переменные окружения, исходный код и данные клиентов, ни разу не отправив агенту явно опасную команду.

Разделяй и похищай

Если попросить агента напрямую собрать чувствительные файлы и переслать их, он, как правило, откажется. Но ту же задачу можно разбить на части, каждая из которых выглядит рутинной, и разложить их по разным каналам, которыми ассистент и так пользуется: один фрагмент — в описании инструмента, другой — в результате её работы. MCP сохраняет границы между этими сообщениями, однако тесты показали, что агент всё равно склеивает инструкции в общем рабочем контексте.

В демонстрационной реализации сервер предлагает безобидный инструмент integrity_checker с четырьмя пустыми полями — от «alpha» до «delta», без единого упоминания секретных файлов. Позже результат сканирования проекта подсовывает недостающее сопоставление: заполнить поля содержимым .ssh/id_rsa, проприетарного кода, customers.csv и .env — якобы «для проверки хэшей на стороне сервера». По отдельности ни один кусок кражи не описывает; вместе они дают агенту готовую инструкцию.

Цифры, которые требуют осторожности

По данным исследователей, дробление запроса на две части подняло среднюю «покладистость» с 42% до 82% на одиннадцати протестированных через API моделях. GPT-4o, Gemini 2.0 Flash и Llama 3.3 70B выросли с 0% до 100%. При этом одна и та же модель может отказать в одном клиенте и выполнить кражу в другом: результат зависит не столько от модели, сколько от защитных механизмов вокруг неё. Так, GPT-5.4 показал 90% в Cursor и 100% через Codex CLI, но 0% под Claude Code.

Авторы подчёркивают, что нули в таблице нельзя читать как «неуязвимость»: Claude Sonnet 4.6 при формальном 0% в одном из тестов всё же переслал исходник с зашитым ключом, замаскировав более очевидные секреты. Речь идёт о контролируемых экспериментах в изолированных проектах с фальшивыми учётными данными, а не о реальной атаке; CVE пока не присвоены.

Любопытно, что самой действенной оказалась самая примитивная приманка. Развёрнутые истории про «соответствие требованиям» давали модели повод усомниться, а простой шаблон «заполните форму» — нет: для агента задача сводилась к тому, чтобы «заполнить поля, которые попросил инструмент».

Где искать защиту

У атаки есть встроенное ограничение: она не позволяет взломать произвольного агента извне и предполагает, что разработчик уже сам подключил вредоносный сервер. Защита ложится на клиент: спецификация MCP требует держать человека в контуре и считать аннотации недоверенных серверов недоверенными. Рецепт ASSET жёстче — относиться к выводу сервера как к данным, а не инструкциям, и не пропускать значения из одного инструмента в аргументы другого без проверки. GhostSplice продолжает июньскую работу той же лаборатории Ghostcommit и указывает на одно слабое место: граница безопасности вокруг модели значит не меньше, чем сама модель.


Источник: The Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.