
Demostración simulada en Python de la evasión de verificación DKIM de CVE-2026-8080, que muestra cómo la canonicalización de encabezados no conforme permite a los atacantes inyectar encabezados mientras la validación de la firma sigue pasando.
# dkim_verifier_sim.py - Flawed DKIM verifier
import re, hashlib
# Simulated email with DKIM signature
raw_email = b"""From: [email protected]
To: [email protected]
Subject: Hello
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=mail; h=from:to:subject;
b=abc123; bh=def456;
X-Extra: injected
This is a test.
"""
def parse_headers(raw):
headers = {}
lines = raw.decode().split('\r\n')
for line in lines:
if ': ' in line:
key, val = line.split(': ', 1)
headers[key.lower()] = val
return headers
def verify_dkim(raw):
headers = parse_headers(raw)
# Vulnerability: canonicalisation does not remove extra headers not in the 'h' list
# According to RFC, only headers listed in 'h' are signed, but the verifier should exclude others.
# Here we simulate that extra header 'x-extra' is mistakenly included in the hash computation
# because the verifier canonicalizes all headers instead of just the listed ones.
signed_headers = headers['dkim-signature'].split('h=')[1].split(';')[0].split(':')
# Build header list for hash
header_block = ""
for h in signed_headers:
header_block += f"{h}:{headers[h]}\r\n"
# Flaw: include extra header X-Extra because it's present in the actual headers
if 'x-extra' in headers:
header_block += f"x-extra:{headers['x-extra']}\r\n"
# Now compute hash and compare... For demo, we'll just print that verification succeeds incorrectly.
print("Verification passed (incorrectly includes extra header)")
verify_dkim(raw_email)
El verificador DKIM de un servidor de correo no sigue estrictamente el algoritmo de canonización definido en RFC 6376. Incluye campos de cabecera adicionales en el cálculo del hash, lo que permite a un atacante añadir una cabecera (por ejemplo, X-Extra: injected) que cambia el comportamiento del correo electrónico mientras la firma sigue superando la verificación.
h=, lo que provoca una discrepancia entre lo que se firmó y lo que se verifica.Ejecute el verificador defectuoso simulado:
python dkim_verifier_sim.py
Imprime "Verification passed" incluso aunque se haya añadido una cabecera adicional.