ReDoS (Denegación de Servicio por Regex)
Las expresiones regulares con cuantificadores anidados pueden tomar tiempo exponencial con ciertos inputs, congelando el event loop de Node.js.
Cómo Funciona
El motor de regex de JavaScript usa backtracking. Un patrón como /(a+)+$/ aplicado a una cadena como 'aaaaaaaaab' hace que el motor explore un número exponencial de caminos antes de fallar. Como Node.js es single-threaded, una sola request maliciosa puede bloquear todo el servidor por segundos.
// MAL: cuantificadores anidados causan backtracking catastrófico
const emailRegex = /^([a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*)+@/;
if (emailRegex.test(userInput)) { /* ... */ }// BIEN: usa un validador de tiempo lineal o una librería segura
import isEmail from 'validator/lib/isEmail';
if (isEmail(userInput)) { /* ... */ }Ejemplo Real
En 2016, una vulnerabilidad ReDoS en el regex de parseo de fechas de moment.js causó una interrupción de 28 minutos en Stack Overflow cuando se envió una fecha mal formada.
Cómo Prevenirlo
- Prueba tus regex con herramientas como safe-regex o vuln-regex-detector antes de deployar
- Evita cuantificadores anidados como (a+)+, (a*)* o alternativas con grupos que se solapan
- Establece una longitud máxima de input antes de correr regex sobre datos de usuarios
- Usa librerías de validación especializadas (validator.js, zod) en vez de regex hechos a mano para formatos comunes
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Contaminación de Prototipo
highHacer merge de objetos controlados por el usuario sin filtrar permite que atacantes modifiquen Object.prototype y afecten todos los objetos de la app.
Aleatoriedad Insegura
highUsar Math.random() para valores sensibles como tokens o IDs es predecible y puede romperse por fuerza bruta.
Service Worker Malicioso
mediumUn service worker registrado sin restricciones de scope puede interceptar todas las requests de red de un dominio, incluyendo las de otras páginas.