highCWE-329A02:2021

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.

Código Vulnerable
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;
}
Código Seguro
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

Node.jsPythonJavaGoC#

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas