
Advertência e PoC benigno para injeção de comandos do sistema operacional em um servidor MCP do nmap, com rastreamento de CVEs duplicadas, orientações de detecção e mitigação.
run_nmap_scanA ferramenta MCP run_nmap_scan constrói o seu comando por interpolação de strings dos
parâmetros target e additionalFlags e executa-o através de
child_process.exec, ou seja, /bin/sh -c.
⚠ Leia isto primeiro — identificador duplicado
Esta vulnerabilidade já era pública antes de este ID CVE existir. Está coberta por CVE-2026-3484 / GHSA-xc68-rrqc-qgq3, atribuído pela VulDB e publicado em 2026-03-03 contra
mcp-nmap-server <= 1.0.1— mesmo pacote, mesmo sink CWE-78child_process.exec.O CVE-2026-52616 foi atribuído a s1ko pelo MITRE CNA-LR em 2026-07-13 em resposta a um relatório independente. Essa atribuição parece ser uma duplicata, e foi sinalizada como tal. O identificador pré-existente CVE-2026-3484 é o que deve ser citado.
Este repositório é publicado por completude e para documentar a duplicata, não como uma reivindicação de descoberta inédita. O crédito pela divulgação pública original não é de s1ko.
| CVE | CVE-2026-52616 — duplicata de CVE-2026-3484 |
| CWE | CWE-78 (Neutralização Incorreta de Elementos Especiais usados em um Comando do SO) |
| Pacote | mcp-nmap-server (npm) |
| Afetado | 1.0.1 e anteriores — todas as versões publicadas |
| Corrigido em | nenhuma — repositório arquivado |
| CVSS v3.1 | AV: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 envolvido num transporte de rede. |
| Relatado independentemente por | s1ko (github.com/s1ko, [email protected]) |
| CVE atribuído | 2026-07-13, MITRE CNA-LR |
Uma armadilha de nomenclatura que vale a pena notar para quem for deduplicar isto: o pacote npm é
mcp-nmap-server e o repositório é nmap-mcp-server. As duas ordenações
referem-se ao mesmo projeto.
Os argumentos das ferramentas MCP são influenciados pelo atacante. São produzidos por um LLM a partir
do conteúdo que o agente processa — documentos, páginas web, saída de ferramentas — pelo que
a injeção indireta de prompts coloca um atacante no controlo dos valores que um handler de ferramenta
recebe. Um handler que introduz qualquer um desses valores numa 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.
dist/index.js — o alvo é anexado a uma string de comando que é depois
entregue a exec:
command += ` ${target}`;
…
const { stdout, stderr } = await promisify(exec)(command);
child_process.exec executa seu argumento em /bin/sh -c, então tudo o que o chamador contribuiu é sintaxe de shell. O schema de entrada Zod declara z.string(), que valida o tipo e não diz nada sobre o conteúdo, então metacaracteres passam adiante. additionalFlags chega à mesma string pela mesma rota.
Uma chamada run_nmap_scan com target definido como
127.0.0.1; touch /tmp/marker; echo INJECTED produz:
/bin/sh -c "nmap … 127.0.0.1; touch /tmp/marker; echo INJECTED"
poc/driver.mjs comunica-se via MCP sobre stdio: ele inicializa o
servidor, emite uma tools/call para run_nmap_scan com um target injetado,
e verifica a existência de um arquivo marcador. O payload é um touch benigno.
npm pack [email protected]
tar xf mcp-nmap-server-1.0.1.tgz && cd package && npm install
node ../poc/driver.mjs
Esperado em uma versão afetada:
==== POC RESULT (mcp-nmap-server) ====
marker /tmp/PWNED_nmap created: true
verdict: CONFIRMED — command injection executed
nmap 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.
Validado em 2026-06-01 num contentor isolado e revalidado em 2026-06-13.
Execute-o apenas contra infraestruturas que está autorizado a testar.
nmap que contenha ;, &&, ||, |, um backtick ou $(.sh -c cuja linha de comando comece por nmap e contenha 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.nmap é esperado; uma shell,
um interpretador ou um cliente de rede não é.target ou additionalFlags contenham
metacaracteres de shell. Um target deve corresponder a um IP, CIDR ou hostname e nada
mais.MITRE ATT&CK T1059.004 Command and Scripting Interpreter: Unix Shell.
O repositório está arquivado e é só de leitura, a versão mais recente no npm é a 1.0.1 afetada, e não será publicada nenhuma versão corrigida. A remoção é a mitigação:
target contra um padrão de
IP/CIDR/hostname e para permitir additionalFlags numa allowlist antes de qualquer
deles chegar à string de comando.A correção, para quem fizer fork, é chamar
execFile("nmap", [...args]) com um vetor de argumentos em vez de construir uma
string para exec. A validação de conteúdo, e não apenas a validação de tipos do Zod, é o
requisito subjacente.
NIST SP 800-53r5 SI-10; OWASP ASVS v4 §5.3.8; mitigações M1 e M2 do CWE-78.
| Data | Evento |
|---|---|
| 2026-03-03 | CVE-2026-3484 / GHSA-xc68-rrqc-qgq3 publicados pela VulDB — a divulgação pública original, por outro investigador |
| 2026-05-29 | Identificado de forma independente através da revisão do código-fonte do tarball publicado, sem conhecimento do aviso de março |
| 2026-06-01 | Validado dinamicamente via MCP stdio num contentor isolado |
| 2026-06-13 | Duplicado identificado durante a deduplicação pré-submissão; repositório confirmado como arquivado com o Private Vulnerability Reporting indisponível. Veredicto interno: não submeter |
| 2026-07-13 | O MITRE CNA-LR atribui CVE-2026-52616 de qualquer forma, creditando s1ko como descobridor |
| 2026-08-22 | Este relatório é publicado, documentando o duplicado |
aws-mcp-server)Avisos complementares da mesma passagem de investigação: CVE-2026-52617, CVE-2026-52618.
MIT — consulte LICENSE.