Revisión de tres alertas altas de secretos en n8n

Revisamos tres alertas altas de n8n: la procedencia del escaneo y el contexto del código deben comprobarse antes de declarar una filtración.

José Palanco José Palanco
Last Updated:
4 min read
Compartir
Revisión de tres alertas altas de secretos en n8n

Más allá de ASPM

AppSec basada en pruebas para equipos que desarrollan con IA

Plexicus usa AI Swarm Pentest para explorar rutas de aplicaciones autorizadas, validar qué es explotable y dar a los equipos evidencia para priorizar la remediación.

Explorar AI Swarm Pentest

El 29 de octubre de 2026 revisamos un conjunto de resultados de Plexicus asociado al repositorio de n8n. Contenía 110 alertas de secretos: tres clasificadas como altas y 107 medias. Ese resumen podría parecer una prueba de credenciales filtradas. Los registros detallados no permitían concluirlo.

Inspeccionamos los tres registros de gravedad alta y contrastamos sus ubicaciones con el código público de la revisión inmutable solicitada. Dos ubicaciones corresponden a constantes de nombre de credencial dentro de módulos simulados. La tercera corresponde a una declaración de tipo de credencial. Ninguna demuestra una credencial utilizable expuesta. La falta del commit realmente escaneado impide también declarar definitivamente falsos positivos del escáner.

Qué demuestran los tres registros

Los registros llevaban la etiqueta «Use of Hard-coded Credentials». Incluían ruta y línea, pero sus campos de código, informe del escáner y descripción estaban vacíos. El indicador de falso positivo era falso. Ese estado de trabajo no demuestra de forma independiente que exista una credencial.

Ubicación notificadaCódigo público en la revisión solicitadaResultado de la revisión
CredentialConfig.test.ts, línea 1002Declaración ICredentialTypeLos metadatos no demuestran un valor de credencial
Prueba de borrado de página de Confluence, línea 14CONFLUENCE_CREDENTIAL_NAME dentro de vi.mockEl nombre simulado no demuestra un secreto utilizable
Prueba de borrado de adjunto de Confluence, línea 8El mismo tipo de constante simuladaHace falta la coincidencia original del escáner

Las pruebas de configuración de credenciales, borrado de páginas y borrado de adjuntos son referencias públicas e inmutables. Publicamos únicamente los identificadores necesarios para explicar el análisis. No incluimos valores de credenciales, identificadores privados ni respuestas completas de la API.

La revisión ausente cambia el veredicto

El registro de Open Source Explorer solicitaba 447fc866bb0a841decfa5e8a29fba06057bfc5bc. Pudimos recuperar los archivos de upstream en ese SHA exacto. Sin embargo, los registros no identificaban la ejecución ni el commit realmente escaneado. Un recuento del repositorio puede incluir registros de otro momento de su historia.

Cuando las líneas cambian, una declaración inocua en la revisión solicitada no demuestra qué detectó el escáner antes. Una etiqueta alta tampoco sustituye la evidencia que falta. El resultado limitado es: los tres registros disponibles y su contexto no establecen una exposición de credenciales. No significa que n8n carezca de secretos en todo su código ni que todas las alertas sean incorrectas.

Flujo conceptual desde una alerta hasta las comprobaciones de commit y código, seguido de un veredicto limitado por la evidencia.

Modelo original de revisión. Explica la evidencia necesaria para decidir; no representa una filtración reproducida.

Un archivo de pruebas aporta contexto

Las credenciales reales también pueden terminar en pruebas, ejemplos y fixtures. Excluir todos esos directorios ocultaría filtraciones auténticas. Hay que determinar qué hace el valor: si autentica, nombra un tipo de credencial, actúa como marcador sintético o referencia otro objeto.

Las dos ubicaciones de Confluence asignan una constante de nombre dentro de un módulo simulado y sustituyen la función de API por un doble de prueba. La tercera inicia un objeto de configuración tipado. Antes de pedir rotaciones o anunciar un incidente, corresponde recuperar la coincidencia original y la explicación de la regla.

Si esa evidencia posterior demuestra una credencial real, sanitiza el informe público y sigue el procedimiento de revocación del proveedor. No intentamos autenticar con ningún valor ni enviamos credenciales candidatas a servicios externos.

Conserva la evidencia junto a la decisión

Guarda la versión del escáner y la regla, el commit escaneado, el rango de código, la coincidencia redactada, la clase de credencial y el razonamiento del revisor. Indica quién asume la corrección. Una comprobación bloqueada o una carga ausente sigue pendiente.

Nuestro flujo de Proof-Driven AppSec conecta la alerta con un resultado revisable. La guía de corrección describe el paso a un cambio revisado. Deep Code Analysis explica el valor del contexto.

Plexicus proporciona los metadatos utilizados. La inspección y las conclusiones de este artículo son una investigación editorial, no una decisión que hayamos demostrado como función automatizada del producto. El flujo de corrección y AI Swarm Pentest describen otros trabajos acotados; no convierten estos registros en filtraciones confirmadas.

Cómo completar el análisis

Solicita la coincidencia original y la revisión real. Reconcilia las líneas antes de confirmar o descartar la alerta. Conserva los enlaces de esta revisión solicitada para que otro analista pueda completar el expediente. No hemos establecido un parche de n8n, una revocación ni una explotación exitosa.

Fuentes

¿Necesitas convertir alertas en decisiones de ingeniería? Contacta con Plexicus con la revisión del repositorio y un paquete de evidencias sanitizado.

Escrito por
José Palanco
José Palanco
José Ramón Palanco es el CEO/CTO de Plexicus, una empresa pionera en ASPM (Gestión de Postura de Seguridad de Aplicaciones) lanzada en 2024, que ofrece capacidades de remediación impulsadas por IA. Anteriormente, fundó Dinoflux en 2014, una startup de Inteligencia de Amenazas que fue adquirida por Telefónica, y ha estado trabajando con 11paths desde 2018. Su experiencia incluye roles en el departamento de I+D de Ericsson y Optenet (Allot). Tiene un título en Ingeniería de Telecomunicaciones de la Universidad de Alcalá de Henares y un Máster en Gobernanza de TI de la Universidad de Deusto. Como experto reconocido en ciberseguridad, ha sido ponente en varias conferencias prestigiosas, incluyendo OWASP, ROOTEDCON, ROOTCON, MALCON y FAQin. Sus contribuciones al campo de la ciberseguridad incluyen múltiples publicaciones de CVE y el desarrollo de varias herramientas de código abierto como nmap-scada, ProtocolDetector, escan, pma, EKanalyzer, SCADA IDS, y más.
Leer más de José
More to read

Related posts

¿Listo para validar lo que importa?

Listo para validar lo que importa.

Plexicus es Proof-Driven AppSec: hallazgos validados, comprensión contextual y remediación revisada — anclada en evidencia, acotada contigo.

Calificación

Comprueba si el AI Swarm Pentest encaja en tu entorno.

Déjanos el contexto mínimo. Revisaremos el alcance y te indicaremos el siguiente paso comercial.

Antes de enviar — verifica que encajas

0 / 280

Sin compromiso. Si no encajas, te lo decimos.

SAMPLE HANDOVER · ILLUSTRATIVE

Sample evidence handover

A trimmed view of what your team receives at the end of an AI Swarm Pentest engagement. Real engagements include full technical evidence, executive narrative, and a remediation plan.

VALIDATED FINDING Evidence attached

Server-Side Request Forgery in webhooks/receiver

demo-project/sample-app · src/webhooks/receiver.py:42

SeverityHigh CVSS 3.18.6 Priority79 Confirmedvia replay

Untrusted caller-supplied URLs reach an internal egress without an allowlist. Replayed in a sandbox against a fresh authorized target — the same control was validated to fail twice.

REVIEWER-READY REMEDIATION Merge-ready PR

Validate the target URL against an allowlist of permitted hostnames. Reject private/internal IP ranges. Enforce HTTPS only.

plexicus/remediation/webhooks-ssrf 3 changed · 0 new files
42resp = requests.get(target_url)
42+if not is_allowed_host(target_url):
43+  raise WebhookRejected(target_url)
44+resp = requests.get(target_url, timeout=5)
Every engagement hands over:
  • Executive briefing
  • Validated findings list
  • Merge-ready PRs
  • Compliance mapping (NIS2 · DORA · CRA)
Ronda privada Para inversores