Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-52618 — Documenta CVE-2026-52618 con un PoC para la inyección de comandos del sistema operativo en @webfer/mcp-ansible-drupal a través de extraVars de executeDeployment, además de orientación de detección y mitigaciones. | Kitploit
Herramientas/GitHubGitHub/s1ko/cve-2026-52618
Análisis de VulnerabilidadesExplotaciónSeguridad de IA
GitHubs1ko/cve-2026-52618

CVE-2026-52618

Documenta CVE-2026-52618 con un PoC para la inyección de comandos del sistema operativo en @webfer/mcp-ansible-drupal a través de extraVars de executeDeployment, además de orientación de detección y mitigaciones.

Ver Repositorio
hace 1 díaAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-52618 — @webfer/mcp-ansible-drupal: Inyección de comandos del sistema operativo a través de las variables extra de executeDeployment

spawn(cmd[0], cmd.slice(1), { shell: true }) vuelve a unir un array de argumentos en una única cadena /bin/sh -c sin escape, por lo que un metacarácter de shell en un valor extraVars suministrado a la herramienta MCP executeDeployment se ejecuta en el host que ejecuta el servidor.

Este problema está corregido. Actualice a 2.0.3 o posterior.

Modelo de amenazas

Los argumentos de las herramientas MCP están influenciados por el atacante. Son producidos por un LLM a partir del contenido que el agente procesa — documentos, páginas web, salida de herramientas —, por lo que la inyección indirecta de prompts otorga a un atacante el control de los valores que recibe un manejador de herramientas. Un manejador que introduce cualquiera de esos valores en un shell convierte esa influencia en ejecución de código en el host que ejecuta el servidor MCP. Este es el mismo modelo que el caso precedente aws-mcp-server / CVE-2026-5058.

La consecuencia es que "el llamador es un LLM de confianza" no es una mitigación. Los argumentos de las herramientas son entrada no confiable.

Ejecución

src/helpers/runAnsible.ts en 2.0.0 construía un array de argumentos y luego lo ejecutaba con el shell habilitado:

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

Con shell: true, Node no ejecuta ansibleCmd[0] con los elementos restantes como argv. Une todo el array en una sola cadena y se la entrega a /bin/sh -c, sin aplicar comillas ni escape a los elementos. Por lo tanto, cualquier elemento que contenga ;, &&, |, comillas invertidas o $() se escapa del comando previsto.

La ruta alcanzable es la herramienta MCP executeDeployment (src/tools/executeDeployment.ts), que reenvía extraVars suministrados por el llamador al array como --extra-vars key=value. Un valor de ; touch /tmp/marker ; produce:

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

Un segundo sumidero en la misma versión interpolaba projectRoot en execSync('ansible-vault encrypt ' + vaultPath).

Reproducción

poc/driver.mjs llama a runAnsible directamente con un valor extraVars manipulado y comprueba la existencia del archivo marcador. No es necesario tener ansible-playbook instalado — el comando inyectado se ejecuta en la misma cadena /bin/sh -c independientemente de si el binario principal se resuelve.

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

Resultado esperado en una versión afectada:

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

Validado el 2026-06-01 en un contenedor aislado y revalidado el 2026-06-13 con un marcador touch benigno. Ejecútelo solo contra infraestructura que esté autorizado a probar.

Detección

  • Cualquier valor --extra-vars que llegue a ansible-playbook y contenga ;, &&, ||, |, una comilla invertida o $(. Los valores legítimos de variables de Ansible prácticamente nunca los contienen.
  • Un proceso sh -c cuya línea de comandos contenga ansible-playbook y un segundo comando después de un separador — una señal de árbol de procesos (auditd, eBPF, Falco, EDR) que no depende del registro de la aplicación.
  • Hijos inesperados del proceso del servidor MCP. ansible-playbook, git y ansible-vault son esperados; un shell, un intérprete o un cliente de red no lo son.
  • Registros de llamadas a herramientas MCP donde los argumentos de executeDeployment contengan metacaracteres de shell. Registre los argumentos de las herramientas — la mayoría de las implementaciones MCP no lo hacen, y es el único lugar donde el valor inyectado es visible en términos de la aplicación.

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

Mitigación

Actualice a @webfer/mcp-ansible-drupal 2.0.3 o posterior. El código actual llama a spawn(ansibleCmd[0], ansibleCmd.slice(1), { … }) sin la opción shell, por lo que el array se pasa como argv y los metacaracteres pierden su significado.

La regla general para los manejadores de herramientas MCP, y lo que la corrección aplica aquí:

  • Nunca habilite shell: true cuando ya se dispone de un array de argumentos. La forma de array existe precisamente para evitar el shell.
  • Nunca construya un comando mediante interpolación de cadenas a partir de un argumento de herramienta. Use execFile/spawn con un vector de argumentos explícito.
  • Valide el contenido, no solo el tipo. Un z.string() de Zod demuestra que el valor es una cadena y nada sobre lo que contiene. Use una lista de permitidos cuando el conjunto de valores sea conocido; rechace los metacaracteres de shell cuando no lo sea.
  • Ejecute el servidor MCP como un usuario sin privilegios con el alcance más restringido de sistema de archivos y red que la herramienta realmente necesite.

NIST SP 800-53r5 SI-10; OWASP ASVS v4 §5.3.8; mitigaciones M1 y M2 de CWE-78.

Cronología

Referencias

  • Paquete npm — https://www.npmjs.com/package/@webfer/mcp-ansible-drupal
  • Repositorio — https://github.com/webfer/MCP-Ansible-Drupal
  • Precedente para el modelo de amenazas de MCP — CVE-2026-5058 (aws-mcp-server)

Avisos complementarios de la misma ronda de investigación: CVE-2026-52616, CVE-2026-52617.

Licencia

MIT — ver LICENSE.

Descargar herramienta
CVECVE-2026-52618
CWECWE-78 (Neutralización incorrecta de elementos especiales utilizados en un comando del sistema operativo)
Paquete@webfer/mcp-ansible-drupal (npm)
Afectado2.0.0
Corregido en2.0.3 (publicado el 2026-06-01)
CVSS v3.1AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 7.8 Alto (transporte stdio). AV:N → 9.8 Crítico si el servidor está envuelto en un transporte de red.
Reportado pors1ko (github.com/s1ko, [email protected])
CVE asignado2026-07-13, MITRE CNA-LR
Fecha
Evento
2026-06-01Vulnerabilidad validada dinámicamente contra 2.0.0
2026-06-012.0.3 publicado en npm con shell: true eliminado
2026-06-13Revalidada en un segundo host
2026-07-13MITRE CNA-LR asigna CVE-2026-52618, s1ko acreditado como descubridor
2026-08-22Publicación de este informe