IV/Nonce Estatico
Usar un Vector de Inicializacion (IV) o nonce hardcodeado o constante para encriptacion anula el proposito del IV y permite a los atacantes detectar patrones y desencriptar datos.
Cómo Funciona
Un IV (Vector de Inicializacion) o nonce asegura que encriptar el mismo texto plano con la misma llave produzca texto cifrado diferente cada vez. Cuando el IV es hardcodeado, constante o predecible, esta propiedad se pierde. En modo CBC, un IV estatico permite a los atacantes detectar cuando el mismo mensaje es encriptado dos veces. En modo CTR, reusar un nonce con la misma llave permite desencripcion trivial — hacer XOR de dos textos cifrados encriptados con la misma llave y nonce cancela el keystream, revelando el XOR de los dos textos planos. En modo GCM, reusar el nonce es catastrofico — permite al atacante recuperar la llave de autenticacion y forjar mensajes encriptados.
const crypto = require('crypto');
const STATIC_IV = Buffer.from('1234567890abcdef');
function encrypt(text, key) {
const cipher = crypto.createCipheriv('aes-256-cbc', key, STATIC_IV);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
}const crypto = require('crypto');
function encrypt(text, key) {
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
return iv.toString('hex') + ':' + encrypted;
}Ejemplo Real
En 2020, investigadores descubrieron que la aplicacion de videoconferencia Zoom usaba una sola llave AES-128 en modo ECB sin IV para encriptar contenido de reuniones. Esto permitia a participantes y posibles espias detectar patrones en streams de video. Zoom posteriormente actualizo a AES-256-GCM con generacion adecuada de IV.
Cómo Prevenirlo
- Genera un IV criptograficamente aleatorio con crypto.randomBytes(16) para cada encriptacion
- Antepone el IV al texto cifrado para que este disponible para la desencriptacion
- Nunca hardcodees, derives de un timestamp o reuses IVs entre encriptaciones
- Usa AES-GCM que hace explicitos los requerimientos de unicidad del nonce
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Modo ECB
mediumUsar modo ECB (Electronic Codebook) para encriptacion produce bloques de texto cifrado identicos para bloques de texto plano identicos, revelando patrones en los datos encriptados.
Tamano de Llave Debil
mediumUsar llaves criptograficas mas cortas que los minimos recomendados (RSA menor a 2048 bits, AES menor a 128 bits) hace la encriptacion vulnerable a ataques de fuerza bruta con hardware moderno.
Validacion de Certificado Deshabilitada
criticalDeshabilitar la validacion de certificados TLS con NODE_TLS_REJECT_UNAUTHORIZED=0 o rejectUnauthorized: false permite ataques man-in-the-middle en todas las conexiones HTTPS.
PRNG Debil para Seguridad
highUsar Math.random() o Date.now() para generar tokens, IDs de sesion o codigos de reset produce valores predecibles que los atacantes pueden adivinar o reproducir.