flawopen.com/Teardowns/cve-2026-104286-fortimail-ibe-path-traversal
CVE-2026-104286: FortiMail में IBE पाथ ट्रैवर्सल
CVE-2026-104286 बिना प्रमाणीकरण वाले HTTP(S) अनुरोधों से path traversal द्वारा कमजोर FortiMail पर फ़ाइलें लिखने देता है। Fortinet सक्रिय दोहन की पुष्टि करता है; IBE बंद करें या web पहुँच सीमित करें, जाँच करें और अपडेट करें।[1], [5]
डाक-कक्ष की कल्पना करें जहाँ कर्मचारी संलग्न फ़ाइलें सही फ़ोल्डर में रखते हैं। यह दोष अनुरोध को भ्रामक फ़ोल्डर-पथ देकर फ़ाइल को तय जगह से बाहर लिखवा सकता है। अस्थायी उपाय IBE बंद करना या web interface तक पहुँच सीमित करना है, फिर अपडेट और पुराने प्रवेश की जाँच करें।[1], [5]
इस पेज के मुख्य शब्द
Path traversal (CWE-22)- अविश्वसनीय path घटक फ़ाइल संचालन के लिए तय निर्देशिका से बाहर निकल जाते हैं। Fortinet प्रभावित FortiMail पर मनमानी फ़ाइल लिखने की बात कहता है।[1], [6]
Identity-Based Encryption (IBE)- FortiMail का encrypted-message workflow फीचर। विक्रेता का अस्थायी उपाय IBE बंद करना है; परिचालन प्रभाव जाँचें।[1], [5]
फ्रेमवर्क मैपिंग
- इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-22
- CISA KEV — जोड़ा गया 2026-10-01 — CVE-2026-104286
मूल कारण विश्लेषण (Root Cause)
Fortinet CVE-2026-104286 को path-traversal दोष बताता है, जिससे बिना प्रमाणीकरण HTTP या HTTPS अनुरोध मनमानी फ़ाइलें लिख सकते हैं। FortiMail firmware बंद स्रोत है और सार्वजनिक advisory में vulnerable source lines या patch diff नहीं हैं; यह लेख उन्हें गढ़ता नहीं। सार्वजनिक सरकारी advisories मनमानी फ़ाइल लिखने के प्रभाव, शोषण और संस्करण मार्गदर्शन की पुष्टि करती हैं, लेकिन FortiMail के आंतरिक handler का विवरण नहीं देतीं। IBE बंद करने या web पहुँच सीमित करने का अस्थायी उपाय और प्रकाशित IOC Fortinet advisory से लिए गए हैं। उपकरण को सीमित करें, जाँच करें, फिर उपयुक्त fixed release लगाएँ; IOC न मिलने से सुरक्षा सिद्ध नहीं होती। CVE record का गद्य 7.2.0–7.2.9, 7.4.0–7.4.8, 7.6.0–7.6.6 और 8.0.0–8.0.1 बताता है। उसी record की structured version table 7.4 और 7.6 की कम ऊपरी सीमाएँ बताती है और 7.0.0–7.0.9 भी जोड़ती है। उसका solutions भाग इससे भी पहले के “आगामी” संस्करण 7.4.8, 7.6.6, 8.0.1 और 7.2.10 बताता है, जो प्रभावित-संस्करण डेटा और 1 अक्टूबर की कनाडाई सलाह से टकराते हैं। उस दिनांकित सरकारी सलाह को प्रकाशित संचालन-मार्गदर्शन मानें और मौजूदा उपलब्धता तथा 7.0 की स्थिति Fortinet से जाँचें; परस्पर-विरोधी CNA फ़ील्ड से ठीक संस्करण का अनुमान न लगाएँ।[1], [3], [5], [4], [6], [7]
ऑपरेटर मैट्रिक्स: संस्करण सीमा और शुरुआती प्रतिक्रिया
| क्षेत्र | आधिकारिक स्रोत क्या बताते हैं | रक्षक की कार्रवाई |
|---|---|---|
| FortiMail 7.0 | NVD/CNA डेटा में 7.0.0–7.0.9 शामिल हैं; कनाडा और फ्रांस के आधिकारिक सारांश 7.0 शाखा का उल्लेख नहीं करते। उसी record के विवरण और तालिका में 7.4 तथा 7.6 की ऊपरी सीमाएँ भी अलग हैं। solutions भाग में कम “आगामी” बिल्ड (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 की मौजूदा advisory में उपलब्धता और समर्थन जाँचें। पुष्टि के बिना कम CNA सीमा न अपनाएँ। |
| रोकथाम और जांच | Fortinet ने सक्रिय शोषण की सूचना दी और IOC प्रकाशित किए; अस्थायी उपाय IBE बंद करना या वेब पहुंच सीमित करना है। | सबूत सुरक्षित रखें, अस्थायी उपाय लागू करें, विक्रेता के IOC जांचें, फिर पैच करें और संभावित समझौते का आकलन करें। |
हमले का चरण-दर-चरण प्रवाह
सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन
FortiMail firmware और vendor patch diff सार्वजनिक नहीं हैं, इसलिए यह Python का एक सामान्य defense pattern है—Fortinet का code या vulnerability reproduction नहीं। यह भरोसेमंद directory को एक बार खोलता है, server-generated opaque filename उपयोग करता है, और exclusive-create तथा no-follow flags के साथ उसी directory descriptor के सापेक्ष नई file बनाता है। यह POSIX-specific है और आवश्यक flags अनुपलब्ध हों तो सुरक्षित रूप से रुकता है। Nested paths के लिए directory descriptors से एक बार में एक validated component पर चलें; string path जाँचकर बाद में उसी नाम से दोबारा न खोलें। CVE-2026-104286 के remediation के लिए Fortinet का supported update या आधिकारिक workaround लागू करें। Configured root path के सभी components और parent directories administrator के नियंत्रण में रहने चाहिए; root खोलते समय O_NOFOLLOW केवल अंतिम component की सुरक्षा करता है।
from pathlib import Path
def destination(root: Path, request_path: str) -> Path:
# असुरक्षित डिज़ाइन का उदाहरण: अनुरोध इनपुट जोड़ें
# लेकिन अनुमत रूट के भीतर होने की जाँच न करें।
return root / request_path
import os
import uuid
# भरोसेमंद service directory एक बार खोलें; इसके parent path directories 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)
# Request path को file path में न बदलें; opaque नाम server से बनाएँ।
# नाम पहले से हो तो O_EXCL विफल होता है; O_NOFOLLOW अंतिम symlink को रोकता है।
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 appliances और versions सूचीबद्ध करें। Fortinet और सरकारी summaries में 7.0 नहीं है, लेकिन CNA structured data 7.0.0–7.0.9 बताता है; Fortinet से पूछें।[1], [5], [6]
- ✓तुरंत vendor workaround लगाएँ: IBE बंद करें या public web access हटाकर trusted private networks तक सीमित करें। Mail टीम के साथ IBE बंद करने का प्रभाव जाँचें।[1]
- ✓Restart या upgrade से पहले logs, configuration backups और forensic evidence सुरक्षित रखें। FG-IR-26-175 के वर्तमान IOC जाँचें और matches की जाँच करें।[1], [4]
- ✓प्रकाशित बिल्ड मार्गदर्शन के लिए कनाडा की AV26-989 सलाह का उपयोग करें; अपडेट से पहले Fortinet की मौजूदा advisory में उपलब्धता और समर्थन जाँचें। पुष्टि के बिना कम CNA सीमा न अपनाएँ।[5], [1], [7]
- ✓Patching और compromise assessment अलग कार्य हैं। Fixed build पहले रखी files, credentials या persistence नहीं हटाता; संकेत मिलने पर incident response शुरू करें।
- ✓अपने file handlers में single strict decode के बाद canonical path को allowlisted root से जाँचें, NUL और malformed encodings रोकें और trusted directory-relative open उपयोग करें।