Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-52618 — Документирует CVE-2026-52618 с PoC для инъекции команд ОС в @webfer/mcp-ansible-drupal через extraVars в executeDeployment, а также рекомендации по обнаружению и меры по смягчению последствий. | Kitploit
Инструменты/GitHubGitHub/s1ko/cve-2026-52618
Анализ уязвимостейЭксплуатацияБезопасность ИИ
GitHubs1ko/cve-2026-52618

CVE-2026-52618

Документирует CVE-2026-52618 с PoC для инъекции команд ОС в @webfer/mcp-ansible-drupal через extraVars в executeDeployment, а также рекомендации по обнаружению и меры по смягчению последствий.

Репозиторий
1 день назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-52618 — @webfer/mcp-ansible-drupal: внедрение команд ОС через extra vars инструмента executeDeployment

spawn(cmd[0], cmd.slice(1), { shell: true }) повторно объединяет массив аргументов в одну строку /bin/sh -c без экранирования, поэтому метасимвол оболочки в значении extraVars, переданном MCP-инструменту executeDeployment, выполняется на хосте, где запущен сервер.

Проблема устранена. Обновитесь до версии 2.0.3 или новее.

Модель угроз

Аргументы MCP-инструментов подвержены влиянию атакующего. Они формируются LLM из контента, который обрабатывает агент, — документов, веб-страниц, вывода инструментов, — поэтому непрямая prompt-инъекция даёт атакующему контроль над значениями, которые получает обработчик инструмента. Обработчик, передающий любое из этих значений в оболочку, превращает это влияние в выполнение кода на хосте, где запущен MCP-сервер. Это та же модель, что и в прецедентном случае aws-mcp-server / CVE-2026-5058.

Следствие: утверждение «вызывающая сторона — доверенная LLM» не является смягчением. Аргументы инструментов — это недоверенный ввод.

Выполнение

src/helpers/runAnsible.ts в версии 2.0.0 собирал массив аргументов и затем запускал его с включённой оболочкой:

root@kitploit:~
const proc = spawn(ansibleCmd[0], ansibleCmd.slice(1), { shell: true });

При shell: true Node не выполняет ansibleCmd[0] с остальными элементами в качестве argv. Он объединяет весь массив в одну строку и передаёт её /bin/sh -c, не применяя к элементам кавычки или экранирование. Поэтому любой элемент, содержащий ;, &&, |, обратные кавычки или $(), выходит за пределы предполагаемой команды.

Достижимый путь — MCP-инструмент executeDeployment (src/tools/executeDeployment.ts), который передаёт предоставленные вызывающей стороной extraVars в массив в виде --extra-vars key=value. Значение ; touch /tmp/marker ; даёт:

root@kitploit:~
/bin/sh -c "ansible-playbook -i inv.ini play.yml ... --extra-vars deploy_env=; touch /tmp/marker ; echo INJECTED"

Второй sink в той же версии подставлял projectRoot в execSync('ansible-vault encrypt ' + vaultPath).

Воспроизведение

poc/driver.mjs вызывает runAnsible напрямую со специально сформированным значением extraVars и проверяет наличие файла-маркера. ansible-playbook устанавливать не требуется — внедрённая команда выполняется в той же строке /bin/sh -c независимо от того, найден ли указанный бинарник.

root@kitploit:~
npm pack @webfer/[email protected] && tar xf webfer-mcp-ansible-drupal-2.0.0.tgz
node poc/driver.mjs

Ожидаемый результат на уязвимой версии:

root@kitploit:~
{"target":"@webfer/mcp-ansible-drupal 2.0.0","sink":"runAnsible -> spawn(cmd[0], cmd.slice(1), {shell:true})","vector":"executeDeployment extraVars value","marker":"/tmp/PWNED_ansible","created":true,"verdict":"CONFIRMED - command injection executed"}

Проверено 2026-06-01 в изолированном контейнере и повторно проверено 2026-06-13 с безвредным маркером touch. Запускайте только против инфраструктуры, которую вам разрешено тестировать.

Обнаружение

  • Любое значение --extra-vars, попадающее в ansible-playbook, которое содержит ;, &&, ||, |, обратную кавычку или $(. Легитимные значения переменных Ansible практически никогда этого не содержат.
  • Процесс sh -c, чья командная строка содержит ansible-playbook и вторую команду после разделителя, — сигнал в дереве процессов (auditd, eBPF, Falco, EDR), который не зависит от журналирования приложения.
  • Неожиданные дочерние процессы MCP-сервера. Ожидаемы ansible-playbook, git и ansible-vault; оболочка, интерпретатор или сетевой клиент — нет.
  • Журналы вызовов MCP-инструментов, где аргументы executeDeployment содержат метасимволы оболочки. Журналируйте аргументы инструментов — большинство MCP-развёртываний этого не делают, и это единственное место, где внедрённое значение видно на уровне приложения.

MITRE ATT&CK: T1059.004 «Командный и скриптовый интерпретатор: Unix Shell».

Меры по смягчению

Обновитесь до @webfer/mcp-ansible-drupal 2.0.3 или новее. Текущий исходный код вызывает spawn(ansibleCmd[0], ansibleCmd.slice(1), { … }) без опции shell, поэтому массив передаётся как argv, и метасимволы теряют своё значение.

Общее правило для обработчиков MCP-инструментов, применённое в этом исправлении:

  • Никогда не включайте shell: true, когда уже доступен массив аргументов. Форма массива существует именно для того, чтобы избежать оболочки.
  • Никогда не собирайте команду строковой интерполяцией аргумента инструмента. Используйте execFile/spawn с явным вектором аргументов.
  • Проверяйте содержимое, а не только тип. Zod z.string() доказывает лишь, что значение является строкой, и ничего не говорит о том, что в ней. Используйте белый список там, где множество значений известно; отклоняйте метасимволы оболочки там, где оно неизвестно.
  • Запускайте MCP-сервер от непривилегированного пользователя с минимально необходимым инструменту доступом к файловой системе и сети.

NIST SP 800-53r5 SI-10; OWASP ASVS v4 §5.3.8; меры M1 и M2 для CWE-78.

Хронология

ДатаСобытие

Ссылки

  • npm-пакет — https://www.npmjs.com/package/@webfer/mcp-ansible-drupal
  • Репозиторий — https://github.com/webfer/MCP-Ansible-Drupal
  • Прецедент для модели угроз MCP — CVE-2026-5058 (aws-mcp-server)

Сопутствующие уведомления из того же цикла исследования: CVE-2026-52616, CVE-2026-52617.

Лицензия

MIT — см. LICENSE.

Скачать инструмент
CVECVE-2026-52618
CWECWE-78 (Некорректная нейтрализация специальных элементов, используемых в команде ОС)
Пакет@webfer/mcp-ansible-drupal (npm)
Затронутая версия2.0.0
Исправлено в2.0.3 (опубликовано 2026-06-01)
CVSS v3.1AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 7.8 Высокий (транспорт stdio). AV:N → 9.8 Критический, если сервер обёрнут в сетевой транспорт.
Сообщилs1ko (github.com/s1ko, [email protected])
CVE присвоен2026-07-13, MITRE CNA-LR
2026-06-01Уязвимость динамически проверена на версии 2.0.0
2026-06-01В npm опубликована версия 2.0.3 с удалённым shell: true
2026-06-13Повторно проверена на втором хосте
2026-07-13MITRE CNA-LR присваивает CVE-2026-52618, s1ko указан как первооткрыватель
2026-08-22Опубликован этот отчёт