flawopen.com/Teardowns/cve-2026-104286-fortimail-ibe-path-traversal
CVE-2026-104286: path traversal IBE FortiMail
CVE-2026-104286 memungkinkan permintaan HTTP(S) tanpa autentikasi menulis file pada FortiMail rentan melalui path traversal. Fortinet melaporkan eksploitasi aktif; nonaktifkan IBE atau batasi akses web, selidiki, lalu perbarui.[1], [5]
Bayangkan ruang surat tempat petugas mengarsipkan lampiran. Kerentanan ini memungkinkan permintaan memberi jalur folder yang menyesatkan sehingga file ditulis di luar area semestinya. Mitigasi sementara menutup akses IBE atau membatasi antarmuka web sambil memperbarui dan memeriksa apakah akses sudah terjadi sebelumnya.[1], [5]
Konsep Kunci & Istilah
Path traversal (CWE-22)- Komponen jalur yang tidak tepercaya keluar dari direktori yang ditentukan untuk operasi file. Fortinet menjelaskan penulisan file arbitrer pada FortiMail terdampak.[1], [6]
Identity-Based Encryption (IBE)- Fitur FortiMail untuk alur kerja pesan terenkripsi. Mitigasi sementara vendor adalah menonaktifkan IBE; pertimbangkan dampak operasionalnya.[1], [5]
Pemetaan kerangka kerja
- Referensi CWE untuk kelemahan yang dijelaskan dalam panduan ini: CWE-22
- CISA KEV — ditambahkan 2026-10-01 — CVE-2026-104286
Analisis Akar Masalah (Root Cause)
Fortinet menjelaskan CVE-2026-104286 sebagai path traversal yang memungkinkan permintaan HTTP atau HTTPS tanpa autentikasi menulis file sembarang. Firmware FortiMail bersifat tertutup dan penasihat publik tidak menyediakan baris sumber rentan atau diff patch; artikel ini tidak mengarangnya. Pemberitahuan pemerintah mengonfirmasi dampak penulisan file, eksploitasi, dan panduan versi, tetapi tidak menjelaskan handler internal FortiMail. Penasihat Fortinet menjadi sumber langkah sementara untuk menonaktifkan IBE atau membatasi akses web serta IOC yang dipublikasikan. Batasi akses ke perangkat dan selidiki, lalu pasang versi perbaikan yang sesuai; tidak ditemukannya IOC bukan bukti aman. Uraian teks pada catatan CVE mencantumkan 7.2.0–7.2.9, 7.4.0–7.4.8, 7.6.0–7.6.6, dan 8.0.0–8.0.1. Tabel versi terstruktur memberi batas atas lebih rendah untuk 7.4 dan 7.6 serta juga mencantumkan 7.0.0–7.0.9. Bagian solusi pada catatan yang sama justru menyebut versi “mendatang” yang lebih rendah, yaitu 7.4.8, 7.6.6, 8.0.1, dan 7.2.10; ini bertentangan dengan data versi terdampak dan penasihat Kanada tanggal 1 Oktober. Gunakan penasihat pemerintah bertanggal tersebut sebagai panduan operasional yang diterbitkan, lalu konfirmasikan ketersediaan saat ini dan cakupan 7.0 kepada Fortinet; jangan menyimpulkan versi perbaikan dari kolom CNA yang saling bertentangan.[1], [3], [5], [4], [6], [7]
Matriks operator: cakupan versi dan respons awal
| Bidang | Keterangan sumber resmi | Tindakan defensif |
|---|---|---|
| FortiMail 7.0 | Data NVD/CNA mencantumkan 7.0.0–7.0.9; ringkasan resmi Kanada dan Prancis tidak mencantumkan cabang 7.0. Uraian dan tabel pada catatan yang sama juga berbeda dalam batas atas 7.4 dan 7.6. Bagian solusi juga mencantumkan versi “mendatang” yang lebih rendah (7.4.8, 7.6.6, 8.0.1, dan 7.2.10), bertentangan dengan rentang terdampak dan penasihat Kanada. | Minta konfirmasi status cabang ini kepada Fortinet; jangan menganggap cabang yang tidak disebut berarti aman. |
| FortiMail 7.2 | Penasihat Kanada menyarankan peningkatan ke cabang 7.4 atau yang lebih baru. | Rencanakan migrasi ke cabang yang didukung dan telah diperbaiki; jangan menganggap tersedia patch untuk 7.2. |
| FortiMail 7.4 / 7.6 / 8.0 | Penasihat Kanada mencantumkan versi perbaikan 7.4.9, 7.6.7, dan 8.0.2 secara berurutan. | Gunakan penasihat Kanada AV26-989 sebagai panduan versi yang diterbitkan; pastikan ketersediaan dan dukungan di penasihat Fortinet terbaru sebelum memperbarui. Jangan mengandalkan batas CNA yang lebih rendah tanpa konfirmasi. |
| Pembatasan dan investigasi | Fortinet melaporkan eksploitasi dan menerbitkan indikator kompromi; langkah sementara adalah menonaktifkan IBE atau membatasi akses web. | Simpan bukti, terapkan langkah sementara, periksa indikator vendor, lalu pasang patch dan nilai kemungkinan kompromi. |
Alur Serangan Langkah demi Langkah
Kode Sumber: Rentan vs Aman
Kode firmware FortiMail dan diff patch vendor tidak tersedia untuk publik, jadi ini pola pertahanan Python generik, bukan kode Fortinet atau reproduksi kerentanan. Pola ini membuka direktori tepercaya sekali, memakai nama opak yang dibuat server, lalu membuat file baru relatif terhadap deskriptor direktori dengan pembuatan eksklusif dan flag tanpa-follow. Ini khusus POSIX dan gagal secara aman jika flag yang diperlukan tidak tersedia. Untuk path bertingkat, telusuri satu komponen tervalidasi setiap kali melalui deskriptor direktori; jangan memeriksa path teks lalu membukanya kembali berdasarkan nama. Terapkan pembaruan yang didukung atau mitigasi sementara resmi Fortinet untuk memperbaiki CVE-2026-104286. Semua komponen path root yang dikonfigurasi, termasuk direktori induknya, harus tetap dikendalikan administrator; O_NOFOLLOW hanya melindungi komponen terakhir saat root dibuka.
from pathlib import Path
def destination(root: Path, request_path: str) -> Path:
# Ilustrasi desain tidak aman: input permintaan digabung
# tanpa memastikan tetap di dalam root yang diizinkan.
return root / request_path
import os
import uuid
# Buka direktori layanan tepercaya sekali; direktori induk path harus dikendalikan administrator.
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)
# Jangan ubah path request menjadi path file; buat nama opak dari server.
# O_EXCL gagal jika nama sudah ada; O_NOFOLLOW menolak tautan simbolis terakhir.
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
Daftar Periksa Penguatan Sistem Rekayasa
- ✓Inventarisasi appliance dan versi FortiMail. Ringkasan Fortinet/pemerintah tidak menyebut 7.0, tetapi data CNA mencakup 7.0.0–7.0.9; minta konfirmasi Fortinet.[1], [5], [6]
- ✓Segera terapkan mitigasi vendor: nonaktifkan IBE atau hilangkan akses publik ke antarmuka web dan batasi ke jaringan privat tepercaya. Bahas dampak IBE dengan tim email.[1]
- ✓Simpan log, cadangan konfigurasi, dan bukti forensik sebelum reboot atau upgrade. Periksa IOC terbaru di FG-IR-26-175 dan selidiki setiap kecocokan.[1], [4]
- ✓Gunakan penasihat Kanada AV26-989 sebagai panduan versi yang diterbitkan; pastikan ketersediaan dan dukungan di penasihat Fortinet terbaru sebelum memperbarui. Jangan mengandalkan batas CNA yang lebih rendah tanpa konfirmasi.[5], [1], [7]
- ✓Pisahkan patching dari penilaian kompromi. Build perbaikan tidak menghapus file, kredensial, atau persistence yang sudah ditanam; jalankan prosedur respons insiden jika ada tanda mencurigakan.
- ✓Pada handler file sendiri, validasi jalur kanonis terhadap root yang diizinkan setelah satu decoding ketat, tolak NUL dan encoding tak valid, serta gunakan pembukaan relatif yang aman.