
Estudio técnico de la vulnerabilidad CVE-2025-68613 en n8n, que abarca las versiones afectadas, el escenario de exploración en laboratorio, el análisis ofensivo y defensivo, y las estrategias de mitigación.
n8n es una plataforma de automatización de flujos de trabajo utilizada para integrar sistemas y servicios mediante flujos visuales y expresiones JavaScript.
CVE-2025-68613 es una vulnerabilidad crítica de Ejecución Remota de Código (RCE), con CVSS 9.9, que afecta a múltiples versiones de n8n. La falla ocurre en el procesamiento de expresiones JavaScript en flujos de trabajo en versiones vulnerables que no están debidamente aisladas. Esto permite que usuarios autenticados con permisos de edición ejecuten código fuera del comportamiento esperado de la aplicación.
En la práctica, esta falla puede explotarse para ejecutar comandos en el servidor donde se ejecuta n8n, utilizando los propios privilegios de la aplicación. Las versiones afectadas abarcan desde la 0.211.0 hasta versiones anteriores a las correcciones aplicadas en 1.120.4, 1.121.1 y 1.122.0.
Este repositorio documenta técnicamente CVE-2025-68613, cubriendo el contexto de la falla, las versiones afectadas, la explotación y las medidas de mitigación recomendadas.

| Estado | Versión de n8n | Nota |
|---|---|---|
| ❌ Afectada | >= 0.211.0 | Introducción del mecanismo vulnerable |
| ❌ Afectada | < 1.120.4 | Vulnerable hasta el parche en la rama 1.120 |
| ❌ Afectada | < 1.121.1 | Vulnerable hasta el parche en la rama 1.121 |
| ❌ Afectada | < 1.122.0 | Vulnerable hasta el parche en la rama 1.122 |
| ✅ Corregida | 1.120.4 | Corrección oficial aplicada |
| ✅ Corregida | 1.121.1 | Corrección oficial aplicada |
| ✅ Corregida | >= 1.122.0 | Corrección incorporada por defecto |
Se recomienda actualizar de inmediato a la versión 1.122.0 o superior.
Para demostrar la vulnerabilidad, se requieren las siguientes condiciones:
La falla ocurre durante la creación y ejecución de flujos de trabajo, no antes de la autenticación.
El primer paso es iniciar sesión en la interfaz web de n8n con un usuario válido.

Este paso confirma que el ataque no es anónimo. La vulnerabilidad requiere un usuario autenticado.
Después de iniciar sesión, verifique que el usuario tenga permisos para crear y editar flujos de trabajo.

Esto es relevante porque solo los usuarios con este nivel de acceso pueden insertar expresiones dinámicas en los flujos de trabajo.
Con el usuario autenticado, cree un nuevo flujo de trabajo desde cero.

Aquí comienza el uso legítimo de la funcionalidad de n8n que, en versiones vulnerables, puede ser explotada.
El primer nodo añadido al flujo de trabajo es el Manual Trigger.

Qué hace este nodo: Permite la ejecución manual del flujo de trabajo, utilizado como punto de partida del flujo.
En este escenario, solo sirve como punto de entrada para la ejecución del flujo de trabajo.
El segundo nodo añadido es el Edit Fields (Set).

Qué hace este nodo: Este nodo permite crear, modificar o sobrescribir campos de datos dentro del flujo de trabajo. Acepta valores estáticos o expresiones JavaScript evaluadas en tiempo de ejecución.
Es precisamente en este punto donde se manifiesta la vulnerabilidad.
Dentro del campo de valor del nodo Edit Fields (Set), inserte una expresión JavaScript envuelta por {{ }}, que es el formato utilizado por n8n para evaluar expresiones dinámicas.

Payload de ejemplo:
{{ (function(){
return this.process.mainModule
.require('child_process')
.execSync('id')
.toString()
})() }}
(function(){ ... })(): Define una función autoinvocada, permitiendo encapsular toda la lógica y devolver un valor directamente a la expresión del flujo de trabajo.this.process: Accede al objeto interno process de Node.js, que expone información y recursos en tiempo de ejecución.process.mainModule: Permite acceder al módulo principal de la aplicación, habilitando la carga de otros módulos internos de Node.js.require('child_process'): Módulo nativo de Node.js que permite crear nuevos procesos en el sistema operativo y ejecutar comandos externos.execSync('id'): Ejecuta un comando directamente en el sistema operativo donde se ejecuta n8n, utilizando los privilegios del proceso de la aplicación..toString(): Convierte la salida del comando ejecutado a texto, permitiendo que el resultado se muestre en la interfaz de n8n.El resultado mostrado confirma que el comando se ejecutó en el sistema operativo utilizando los privilegios del proceso de n8n, lo que caracteriza una Ejecución Remota de Código (RCE).