Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-52618 — Documenta a CVE-2026-52618 com um PoC para injeção de comandos no sistema operacional em @webfer/mcp-ansible-drupal via executeDeployment extraVars, além de orientações de detecção e mitigações. | Kitploit
Ferramentas/GitHubGitHub/s1ko/cve-2026-52618
Análise de VulnerabilidadesExploraçãoSegurança de IA
GitHubs1ko/cve-2026-52618

CVE-2026-52618

Documenta a CVE-2026-52618 com um PoC para injeção de comandos no sistema operacional em @webfer/mcp-ansible-drupal via executeDeployment extraVars, além de orientações de detecção e mitigações.

Ver Repositório
24há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-52618 — @webfer/mcp-ansible-drupal: injeção de comando do SO via extra vars de executeDeployment

spawn(cmd[0], cmd.slice(1), { shell: true }) recombina um array de argumentos em uma única string /bin/sh -c sem escapar, portanto um metacaractere de shell em um valor de extraVars fornecido à ferramenta MCP executeDeployment é executado no host que executa o servidor.

CVECVE-2026-52618
CWECWE-78 (Neutralização Incorreta de Elementos Especiais usados em um Comando do SO)
Pacote@webfer/mcp-ansible-drupal (npm)
Afetado2.0.0
Corrigido em2.0.3 (publicado em 2026-06-01)
CVSS v3.1AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 8.4 Alto (transporte stdio). AV:N → 9.8 Crítico se o servidor for encapsulado em um transporte de rede.
Reportado pors1ko (github.com/s1ko, [email protected])
CVE atribuído2026-07-13, MITRE CNA-LR

Este problema está corrigido. Atualize para 2.0.3 ou posterior.

Modelo de ameaça

Os argumentos de ferramentas MCP são influenciados pelo atacante. Eles são produzidos por um LLM a partir do conteúdo que o agente processa — documentos, páginas web, saída de ferramentas —, portanto a injeção indireta de prompt coloca um atacante no controle dos valores que um manipulador de ferramenta recebe. Um manipulador que insere qualquer um desses valores em um shell transforma essa influência em execução de código no host que executa o servidor MCP. Este é o mesmo modelo do caso precedente aws-mcp-server / CVE-2026-5058.

A consequência é que "o chamador é um LLM confiável" não é uma mitigação. Os argumentos de ferramentas são entrada não confiável.

Execução

src/helpers/runAnsible.ts na versão 2.0.0 construía um array de argumentos e então o executava com o shell habilitado:

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

Com shell: true, o Node não executa ansibleCmd[0] com os elementos restantes como argv. Ele junta todo o array em uma única string e a entrega a /bin/sh -c, sem aplicar aspas ou escape aos elementos. Qualquer elemento que contenha ;, &&, |, crases ou $() portanto escapa do comando pretendido.

O caminho alcançável é a ferramenta MCP executeDeployment (src/tools/executeDeployment.ts), que encaminha os extraVars fornecidos pelo chamador para o array como --extra-vars key=value. Um valor de ; touch /tmp/marker ; resulta em:

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

Um segundo sink na mesma versão interpolava projectRoot em execSync('ansible-vault encrypt ' + vaultPath).

Reprodução

poc/driver.mjs chama runAnsible diretamente com um valor extraVars manipulado e verifica a existência do arquivo marcador. O ansible-playbook não precisa estar instalado — o comando injetado é executado na mesma string /bin/sh -c independentemente de o binário inicial ser resolvido ou não.

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

Esperado em uma versão afetada:

{"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"}

Validado em 2026-06-01 num contentor isolado e revalidado em 2026-06-13 com um marcador touch benigno. Execute-o apenas contra infraestruturas que está autorizado a testar.

Deteção

  • Qualquer valor de --extra-vars que chegue ao ansible-playbook e contenha ;, &&, ||, |, um backtick ou $(. Valores legítimos de variáveis Ansible essencialmente nunca o fazem.
  • Um processo sh -c cuja linha de comando contenha ansible-playbook e um segundo comando após um separador — um sinal de árvore de processos (auditd, eBPF, Falco, EDR) que não depende do registo da aplicação.
  • Processos filhos inesperados do processo do servidor MCP. ansible-playbook, git e ansible-vault são esperados; uma shell, um interpretador ou um cliente de rede não o são.
  • Registos de chamadas de ferramentas MCP em que os argumentos de executeDeployment contenham metacaracteres de shell. Registe os argumentos das ferramentas — a maioria das implementações MCP não o faz, e é o único local onde o valor injetado é visível em termos de aplicação.

MITRE ATT&CK T1059.004 Command and Scripting Interpreter: Unix Shell.

Mitigação

Atualize para @webfer/mcp-ansible-drupal 2.0.3 ou posterior. O código-fonte atual chama spawn(ansibleCmd[0], ansibleCmd.slice(1), { … }) sem a opção shell, pelo que o array é passado como argv e os metacaracteres perdem o seu significado.

A regra geral para handlers de ferramentas MCP, e o que a correção aplica aqui:

  • Nunca ative shell: true quando já existe um array de argumentos. A forma de array existe precisamente para evitar a shell.
  • Nunca construa um comando por interpolação de strings de um argumento de ferramenta. Use execFile/spawn com um vetor de argumentos explícito.
  • Valide o conteúdo, não apenas o tipo. Um z.string() do Zod prova que o valor é uma string e nada sobre o que contém. Use allowlist quando o conjunto de valores é conhecido; rejeite metacaracteres de shell quando não é.
  • Execute o servidor MCP como um utilizador sem privilégios, com o menor alcance de sistema de ficheiros e de rede de que a ferramenta realmente necessita.

NIST SP 800-53r5 SI-10; OWASP ASVS v4 §5.3.8; mitigações M1 e M2 do CWE-78.

Cronologia

DataEvento
2026-06-01Vulnerabilidade validada dinamicamente contra a 2.0.0
2026-06-012.0.3 publicada no npm com o shell: true removido
2026-06-13Revalidada num segundo host
2026-07-13MITRE CNA-LR atribui CVE-2026-52618, s1ko creditado como descobridor
2026-08-22Publicação deste artigo

Referências

  • Pacote npm — https://www.npmjs.com/package/@webfer/mcp-ansible-drupal
  • Repositório — https://github.com/webfer/MCP-Ansible-Drupal
  • Precedente para o modelo de ameaça MCP — CVE-2026-5058 (aws-mcp-server)

Avisos complementares da mesma ronda de investigação: CVE-2026-52616, CVE-2026-52617.

Licença

MIT — consulte LICENSE.

Baixar ferramenta