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-52617 — Aviso y prueba de concepto de inyección de comandos del sistema operativo en un asistente ffmpeg de MCP, con análisis de causa raíz, orientación para detectores y mitigaciones para un paquete npm sin corregir. | Kitploit
Herramientas/GitHubGitHub/s1ko/cve-2026-52617
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónSeguridad de Cadena de Suministro
GitHubs1ko/cve-2026-52617

CVE-2026-52617

Aviso y prueba de concepto de inyección de comandos del sistema operativo en un asistente ffmpeg de MCP, con análisis de causa raíz, orientación para detectores y mitigaciones para un paquete npm sin corregir.

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-52617 — @sworddut/mcp-ffmpeg-helper: inyección de comandos del sistema operativo a través de las opciones de la herramienta ffmpeg

runFFmpegCommand pasa una cadena construida a partir de los parámetros de la herramienta MCP a spawn(…, { shell: true }), por lo que los metacaracteres de shell en options, format, codec, pixelFormat o extraOptions se ejecutan en el host que ejecuta el servidor.

⚠ No existe una versión corregida

A fecha de 2026-08-22, la última versión publicada en npm es la 0.2.1, que es la versión afectada, y el sink sigue presente en la rama por defecto del repositorio. No hay nada a lo que actualizar. Consulta Mitigation para saber qué pueden hacer los usuarios mientras tanto.

Modelo de amenaza

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 pone al atacante en 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.

Un servidor de conversión de medios es un objetivo particularmente natural para esto: los archivos que se le pide procesar son exactamente el contenido no confiable que un agente recoge de otros lugares.

Ejecución

src/utils/ffmpeg.ts — el comando se ensambla como una cadena y el shell se habilita explícitamente:

root@kitploit:~
function runProcess(command: string, args: string[], useShell = false) {
  const child = spawn(command, args, { shell: useShell, windowsHide: true });
  …
}

export async function runFFmpegCommand(command: string): Promise<string> {
  const { stdout, stderr, code } = await runProcess(`ffmpeg ${command}`, [], true);
  …
}

spawn("ffmpeg " + command, [], { shell: true }) ejecuta la cadena completa a través de /bin/sh -c. Todo lo que el llamador aportó a command es sintaxis de shell.

src/tools/handlers.ts llega a ese helper desde tres herramientas, interpolando parámetros cuyo contenido nunca se valida:

HerramientaParámetros inyectables
convert_video

Solo se comprueban inputPath y outputPath, y los esquemas Zod validan el tipo (z.string()), nunca el contenido — por lo que los metacaracteres pasan directamente.

Una llamada a convert_video con options establecido en ; touch /tmp/marker ; produce:

root@kitploit:~
/bin/sh -c "ffmpeg -i /tmp/in.mp4 ; touch /tmp/marker ; /tmp/out.mp4"

Reproducción

poc/driver.mjs habla MCP sobre stdio: inicializa el servidor, emite una tools/call para convert_video con un valor options inyectado y comprueba la existencia de un archivo marcador. La carga útil es un touch benigno.

root@kitploit:~
npm pack @sworddut/[email protected]
tar xf sworddut-mcp-ffmpeg-helper-0.2.1.tgz && cd package && npm install
node ../poc/driver.mjs

Resultado esperado en una versión afectada:

root@kitploit:~
==== POC RESULT (@sworddut/mcp-ffmpeg-helper) ====
marker /tmp/PWNED_ffmpeg created: true
verdict: CONFIRMED — command injection executed

No es necesario que ffmpeg esté instalado — el comando inyectado se ejecuta en la misma cadena /bin/sh -c independientemente de si el binario inicial se resuelve. Validado el 2026-06-01 en un contenedor aislado, revalidado el 2026-06-13, y el sink se re-confirmó presente en la rama por defecto el 2026-08-22. Ejecútalo solo contra infraestructura que estés autorizado a probar.

Detección

  • Una línea de comandos de ffmpeg que contenga ;, &&, ||, |, una comilla invertida o $(. Las invocaciones legítimas de ffmpeg de este servidor no las contienen.
  • Un proceso sh -c cuya línea de comandos comience con ffmpeg y contenga 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. ffmpeg y ffprobe son esperados; un shell, un intérprete o un cliente de red no lo son.
  • El servidor registra cada invocación en stderr como Running FFmpeg command: ffmpeg <command>, que es el lugar más barato para detectar un valor inyectado si los registros se recopilan.
  • Registros de llamadas a herramientas MCP donde options, , , o contengan metacaracteres de shell.

MITRE ATT&CK T1059.004 Intérprete de comandos y scripts: Shell Unix.

Mitigación

No existe una versión parcheada, por lo que las opciones son contención y eliminación:

  • Deja de usar el paquete si el agente al que sirve procesa cualquier contenido no confiable. Esta es la única mitigación completa disponible hoy.
  • Si debe permanecer, ejecútalo en un contenedor o VM como usuario sin privilegios, con un sistema de archivos de solo lectura aparte del directorio de trabajo de medios, sin credenciales en su entorno y sin salida de red. La ejecución de código entonces le da al atacante una sandbox en lugar del host.
  • No lo expongas a través de un transporte de red. El despliegue solo con stdio es lo que mantiene esto en 7.8 en lugar de 9.8.
  • Envuelve o bifurca el servidor para rechazar metacaracteres de shell en los cinco parámetros enumerados arriba antes de que lleguen a runFFmpegCommand.

La corrección upstream es eliminar shell: true y pasar a ffmpeg un vector de argumentos — spawn("ffmpeg", ["-i", inputPath, …]) — construyendo ese array a partir de valores format, codec y pixelFormat de una lista permitida en lugar de cadenas de formato libre. La validación de contenido, no solo la validación de tipos de Zod, es el requisito subyacente.

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/@sworddut/mcp-ffmpeg-helper
  • Repositorio — https://github.com/sworddut/mcp-ffmpeg-helper
  • Precedente para el modelo de amenaza MCP — CVE-2026-5058 (aws-mcp-server)

Avisos complementarios de la misma pasada de investigación: CVE-2026-52616, CVE-2026-52618.

Licencia

MIT — consulta LICENSE.

Descargar herramienta
CVECVE-2026-52617
CWECWE-78 (Neutralización incorrecta de elementos especiales usados en un comando del sistema operativo)
Paquete@sworddut/mcp-ffmpeg-helper (npm)
Afectadas0.2.1 y anteriores — todas las versiones publicadas
Corregida enninguna
CVSS v3.1AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 7.8 Alta (transporte stdio). AV:N → 9.8 Crítica si el servidor está envuelto en un transporte de red.
Reportado pors1ko (github.com/s1ko, [email protected])
CVE asignado2026-07-13, MITRE CNA-LR
options
extract_audioformat
create_video_from_imagescodec, pixelFormat, extraOptions
format
codec
pixelFormat
extraOptions
FechaEvento
2026-05-29Vulnerabilidad identificada mediante revisión del código fuente del tarball publicado
2026-06-01Validada dinámicamente a través de MCP stdio en un contenedor aislado
2026-06-13Revalidada en un segundo host; el repositorio no tiene habilitado el Private Vulnerability Reporting, y los campos repository/bugs/homepage de package.json se dejan en la plantilla github.com/yourusername, sin dejar un contacto de seguridad documentado
2026-07-13MITRE CNA-LR asigna CVE-2026-52617, dando crédito a s1ko como descubridor
2026-08-22Sink re-confirmado en la rama por defecto; npm latest todavía 0.2.1; este informe publicado