FlawOpen

flawopen.com/Teardowns/cve-2026-104286-fortimail-ibe-path-traversal

● CVE-2026-104286 · CVSS 9.8[7] · Critique
Recherche · FlawOpen

CVE-2026-104286 : path traversal FortiMail IBE

CVE-2026-104286 permet à des requêtes HTTP(S) non authentifiées d’écrire des fichiers sur FortiMail par traversal de chemin. Fortinet signale une exploitation active ; désactivez IBE ou limitez l’accès web, enquêtez et mettez à jour.[1], [5]

💡 Explication en Langage Simple (ELI5)

Imaginez un local courrier où un employé classe les pièces jointes. La faille permet à une requête de lui fournir un chemin trompeur et d’écrire hors de la zone prévue. La mesure d’urgence ferme l’accès IBE ou limite l’accès à l’interface web pendant la mise à jour et la recherche d’une compromission antérieure.[1], [5]

Concepts Clés et Termes

Path traversal (CWE-22)
Des composants de chemin non fiables sortent du répertoire prévu. Fortinet décrit l’écriture arbitraire de fichiers sur les systèmes FortiMail concernés.[1], [6]
Identity-Based Encryption (IBE)
Fonction FortiMail utilisée pour le chiffrement des messages. La mesure temporaire du fournisseur consiste à désactiver IBE ; évaluez son impact métier.[1], [5]
CISA KEV
La CISA a ajouté CVE-2026-104286 au catalogue KEV le 1er octobre 2026. Cela atteste d’une exploitation connue, pas de la compromission d’un appareil précis.[2], [5]
Écart sur les versions
Le résumé Fortinet et les avis officiels citent les branches 7.2, 7.4, 7.6 et 8.0 ; les données CNA citent aussi 7.0. Confirmez cette branche auprès de Fortinet.[6], [5], [4]

Correspondances de référentiels

Analyse de Cause Racine

Fortinet décrit CVE-2026-104286 comme une traversal de chemin permettant à des requêtes HTTP ou HTTPS sans authentification d’écrire des fichiers. Le firmware est fermé et l’avis public ne fournit ni lignes vulnérables ni diff du correctif ; cet article ne les invente pas. Les avis officiels confirment l’écriture arbitraire, l’exploitation et les indications de versions, mais ne décrivent pas le gestionnaire interne de FortiMail. L’avis Fortinet est la source de la mesure provisoire consistant à désactiver IBE ou limiter l’accès web, ainsi que des IOC publiés. Contenez et examinez l’appareil, puis installez la version corrigée adaptée ; l’absence d’IOC ne prouve pas l’absence de compromission. La description en prose de la fiche CVE indique 7.2.0–7.2.9, 7.4.0–7.4.8, 7.6.0–7.6.6 et 8.0.0–8.0.1. Son tableau structuré donne des bornes supérieures plus basses pour 7.4 et 7.6 et inclut aussi 7.0.0–7.0.9. Sa section des solutions mentionne des versions futures plus basses — 7.4.8, 7.6.6, 8.0.1 et 7.2.10 — en contradiction avec ses propres données et l’avis canadien du 1er octobre. Utilisez cet avis officiel daté comme consigne opérationnelle publiée et confirmez auprès de Fortinet la disponibilité actuelle et le périmètre de 7.0 ; ne déduisez pas la version corrigée des champs CNA contradictoires.[1], [3], [5], [4], [6], [7]

Matrice opérateur : versions et première réponse

DomaineCe que disent les sources officiellesAction défensive
FortiMail 7.0Les données NVD/CNA indiquent les versions 7.0.0 à 7.0.9 ; les synthèses officielles du Canada et de la France ne citent pas la branche 7.0. La description et le tableau de cette même fiche divergent aussi sur les bornes supérieures de 7.4 et 7.6. La section des solutions cite aussi des versions futures plus basses (7.4.8, 7.6.6, 8.0.1 et 7.2.10), en contradiction avec les plages touchées et l’avis canadien.Demandez confirmation à Fortinet ; ne déduisez pas qu’une branche omise est sûre.
FortiMail 7.2L’avis canadien recommande de passer à la branche 7.4 ou ultérieure.Planifiez la migration vers une branche prise en charge et corrigée ; ne supposez pas qu’un correctif 7.2 existe.
FortiMail 7.4 / 7.6 / 8.0L’avis canadien indique les versions corrigées 7.4.9, 7.6.7 et 8.0.2, respectivement.Utilisez l’avis canadien AV26-989 comme indication publiée de versions ; vérifiez disponibilité et prise en charge dans l’avis Fortinet actuel avant la mise à jour. Ne retenez pas les seuils CNA inférieurs sans confirmation.
Endiguement et investigationFortinet signale une exploitation et publie des indicateurs de compromission ; sa mesure provisoire consiste à désactiver IBE ou limiter l’accès web.Préservez les preuves, appliquez la mesure provisoire, examinez les indicateurs du fournisseur, corrigez puis évaluez une éventuelle compromission.

Déroulement de l'Attaque Étape par Étape

Étape 1

Une requête non authentifiée atteint le flux web

Fortinet indique que des requêtes HTTP ou HTTPS spécialement construites peuvent déclencher la faille sans identifiants. L’avis ne révèle pas le gestionnaire interne ni l’implémentation exacte.[1], [5], [4]

Étape 2

Le chemin sort de la limite prévue

Le fournisseur classe le problème comme traversal de chemin (CWE-22), permettant l’écriture de fichiers sur FortiMail. N’inférez pas une méthode de persistance précise à partir du seul CVE.[1], [6], [5]

Étape 3

Les fichiers écrits peuvent aggraver l’impact

Fortinet attribue CVSS 3.1 9,8 Critique et signale une exploitation active. Utilisez les IOC actuels du fournisseur pour l’enquête.[1], [5], [4]

Étape 4

Mitigez, préservez les preuves et mettez à jour

Désactivez IBE ou limitez l’accès web aux réseaux de confiance. Préservez journaux et configuration, consultez les IOC puis installez la version corrigée de la branche.[1], [5]

Code Source : Vulnérable vs Sécurisé

Le firmware FortiMail et le diff du correctif du fournisseur ne sont pas publics ; il s’agit d’un modèle générique de défense en Python, pas du code Fortinet ni d’une reproduction. Il ouvre une fois un répertoire de confiance, utilise un nom opaque généré par le serveur et crée un nouveau fichier relatif au descripteur de ce répertoire avec création exclusive et options sans suivi de lien. Ce modèle est spécifique à POSIX et échoue de manière sûre si les options requises manquent. Pour les chemins imbriqués, parcourir un composant validé à la fois avec des descripteurs de répertoire ; ne pas vérifier un chemin textuel puis le rouvrir par son nom. Appliquer la mise à jour ou la mesure temporaire officielle de Fortinet pour corriger CVE-2026-104286. Tous les composants du chemin racine configuré, y compris ses répertoires parents, doivent rester sous contrôle administratif ; O_NOFOLLOW ne protège que le composant final lors de son ouverture.

IMPLÉMENTATION VULNÉRABLE
from pathlib import Path

def destination(root: Path, request_path: str) -> Path:
    # Schéma illustratif à risque : l'entrée est jointe
    # sans vérifier qu'elle reste sous la racine autorisée.
    return root / request_path
PATCH SÉCURISÉ ET ROBUSTE
import os
import uuid

# Ouvrir une fois le répertoire de confiance du service ; ses parents doivent rester sous contrôle administratif.

def open_upload_root(root):
    required = ("O_DIRECTORY", "O_NOFOLLOW")
    if not all(hasattr(os, flag) for flag in required) or os.open not in os.supports_dir_fd:
        raise RuntimeError("POSIX directory protections unavailable")
    flags = os.O_RDONLY | os.O_DIRECTORY | os.O_NOFOLLOW
    return os.open(root, flags)

# Ne pas convertir un chemin de requête en chemin de fichier ; générer un nom opaque.
# O_EXCL échoue si le nom existe ; O_NOFOLLOW rejette un lien symbolique final.
ROOT_FD = open_upload_root("/srv/app-private/uploads")


def create_upload_file():
    name = uuid.uuid4().hex
    flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW
    fd = os.open(name, flags, 0o600, dir_fd=ROOT_FD)
    return name, fd

Liste de Contrôle de Sécurité pour l'Ingénierie

Sources