flawopen.com/Teardowns/cve-2026-104286-fortimail-ibe-path-traversal
CVE-2026-104286: обход пути в IBE FortiMail
CVE-2026-104286 позволяет неаутентифицированным HTTP(S)-запросам записывать файлы на уязвимые системы FortiMail через обход пути. Fortinet сообщает об активной эксплуатации; отключите IBE или ограничьте веб-доступ, расследуйте и обновите систему.[1], [5]
Представьте почтовую комнату, где сотрудник раскладывает вложения по папкам. Ошибка позволяет запросу указать обманный путь и записать файл за пределами нужной папки. Временная мера закрывает IBE или ограничивает доступ к веб-интерфейсу, пока администраторы обновляют устройство и ищут следы прежнего доступа.[1], [5]
Ключевые понятия и термины
Обход пути (CWE-22)- Недоверенные компоненты пути выходят за границы целевого каталога. Fortinet описывает произвольную запись файлов на затронутых системах FortiMail.[1], [6]
Identity-Based Encryption (IBE)- Функция FortiMail для сценариев шифрования сообщений. Временная мера производителя — отключить IBE; оцените влияние на процессы почты.[1], [5]
Связи со стандартами
- Ссылка CWE для слабого места, описанного в этом руководстве: CWE-22
- CISA KEV — добавлено 2026-10-01 — CVE-2026-104286
Анализ первопричины
Fortinet описывает CVE-2026-104286 как обход пути, позволяющий неаутентифицированным HTTP- или HTTPS-запросам записывать произвольные файлы. Прошивка закрытая; публичное уведомление не содержит уязвимых строк или diff исправления, поэтому статья не выдумывает их. Публичные государственные уведомления подтверждают запись произвольных файлов, эксплуатацию и рекомендации по версиям, но не описывают внутренний обработчик FortiMail. Уведомление Fortinet — источник временной меры отключить IBE или ограничить веб-доступ, а также опубликованных IOC. Ограничьте доступ к устройству, расследуйте возможную компрометацию, затем установите подходящий исправленный выпуск; отсутствие совпадений IOC не доказывает безопасность. В текстовом описании записи CVE указаны 7.2.0–7.2.9, 7.4.0–7.4.8, 7.6.0–7.6.6 и 8.0.0–8.0.1. В структурированной таблице указаны более низкие верхние границы для 7.4 и 7.6, а также добавлены 7.0.0–7.0.9. Раздел решений той же записи называет более ранние будущие выпуски — 7.4.8, 7.6.6, 8.0.1 и 7.2.10, — что противоречит данным о затронутых версиях и канадскому уведомлению от 1 октября. Используйте это датированное уведомление госоргана как опубликованное руководство к действию и уточните у Fortinet текущую доступность выпусков и статус 7.0; не выводите исправленную версию из противоречивых полей CNA.[1], [3], [5], [4], [6], [7]
Матрица для операторов: версии и первичные меры
| Область | Что указано в официальных источниках | Действие защитника |
|---|---|---|
| FortiMail 7.0 | Данные NVD/CNA указывают версии 7.0.0–7.0.9; в официальных сводках Канады и Франции ветка 7.0 не указана. Описание и таблица той же записи также расходятся по верхним границам для 7.4 и 7.6. В разделе решений также указаны более ранние будущие выпуски (7.4.8, 7.6.6, 8.0.1 и 7.2.10), что противоречит диапазонам затронутых версий и уведомлению Канады. | Запросите подтверждение у Fortinet; не считайте пропуск ветки подтверждением её безопасности. |
| FortiMail 7.2 | Канадское предупреждение рекомендует перейти на ветку 7.4 или новее. | Запланируйте переход на поддерживаемую исправленную ветку; не предполагайте наличие исправления для 7.2. |
| FortiMail 7.4 / 7.6 / 8.0 | В канадском предупреждении указаны исправленные версии 7.4.9, 7.6.7 и 8.0.2 соответственно. | Используйте канадское уведомление AV26-989 как опубликованное руководство по сборкам; перед обновлением проверьте доступность и поддержку в актуальном уведомлении Fortinet. Не полагайтесь на более низкие пороги CNA без подтверждения. |
| Сдерживание и расследование | Fortinet сообщает об эксплуатации и публикует индикаторы компрометации; временная мера — отключить IBE или ограничить веб-доступ. | Сохраните доказательства, примените временную меру, проверьте индикаторы Fortinet, установите обновление и оцените возможную компрометацию. |
Пошаговый сценарий атаки
Исходный код: Уязвимый vs Защищённый вариант
Исходный код прошивки FortiMail и diff исправления недоступны, поэтому это общий шаблон защиты на Python, а не код Fortinet и не воспроизведение уязвимости. Он один раз открывает доверенный каталог, использует непрозрачное имя, созданное сервером, и создаёт новый файл относительно дескриптора каталога с эксклюзивным созданием и флагами запрета перехода по ссылкам. Пример предназначен для POSIX и безопасно прекращает работу, если нужные флаги недоступны. Для вложенных путей проходите по одному проверенному компоненту через дескрипторы каталогов; не проверяйте строковый путь, чтобы затем снова открыть его по имени. Для CVE-2026-104286 установите поддерживаемое обновление Fortinet или примените официальную временную меру. Все компоненты настроенного корневого пути, включая родительские каталоги, должны оставаться под контролем администратора; при открытии O_NOFOLLOW защищает только последний компонент.
from pathlib import Path
def destination(root: Path, request_path: str) -> Path:
# Небезопасная схема: ввод запроса объединяется с путем
# без проверки границ разрешенного каталога.
return root / request_path
import os
import uuid
# Один раз откройте доверенный каталог службы; родительские каталоги пути должны контролироваться администратором.
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)
# Не преобразуйте путь запроса в путь файла; создавайте непрозрачное имя.
# O_EXCL завершится ошибкой, если имя занято; O_NOFOLLOW отклонит конечную ссылку.
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
Чек-лист по защите системы для инженеров
- ✓Проверьте устройства и версии FortiMail. Сводки Fortinet и госорганов не включают 7.0, но структурированные CNA-данные указывают 7.0.0–7.0.9; запросите подтверждение у Fortinet.[1], [5], [6]
- ✓Немедленно примените меру производителя: отключите IBE либо уберите публичный веб-доступ и оставьте только доверенные частные сети. Согласуйте влияние отключения с почтовой командой.[1]
- ✓До перезапуска или обновления сохраните журналы, конфигурационные копии и форензические данные. Проверьте актуальные IOC в FG-IR-26-175 и расследуйте совпадения.[1], [4]
- ✓Используйте канадское уведомление AV26-989 как опубликованное руководство по сборкам; перед обновлением проверьте доступность и поддержку в актуальном уведомлении Fortinet. Не полагайтесь на более низкие пороги CNA без подтверждения.[5], [1], [7]
- ✓Разделяйте обновление и проверку компрометации. Исправленный выпуск не удаляет ранее размещённые файлы, учётные данные или закрепление; при подозрительных признаках запускайте реагирование на инцидент.
- ✓В собственных обработчиках проверяйте канонический путь после однократного строгого декодирования, отклоняйте NUL и неверные кодировки и открывайте файл относительно доверенного каталога.