許多嵌入式設備在處理 USB 隨身碟或 SD 卡時,也就是讀取 FAT 與 exFAT 檔案系統時,正潛藏著嚴重的安全風險。安全公司 runZero 最近披露了 FatFs 庫中的七個漏洞,這是一個極其輕量化且被廣泛採用的開源檔案系統庫。由於 FatFs 被整合進數以百萬計的設備韌體中,從安全攝影機、工業控制器、無人機到硬體加密錢包,幾乎所有運行即時作業系統(RTOS)的設備都可能受到影響。
理解漏洞的核心:為什麼物理接觸就能導致越獄
對於初入行的工程師來說,必須理解嵌入式設備與現代電腦或手機在記憶體保護機制上的巨大差異。現代作業系統擁有強大的記憶體保護(如 ASLR 或 DEP),能有效防止攻擊者透過緩衝區溢位來執行惡意程式碼。然而,許多嵌入式設備缺乏這些保護措施,這意味著一旦攻擊者能透過惡意構造的儲存設備觸發記憶體損壞,就幾乎等同於直接取得了設備的最高控制權,即所謂的越獄(Jailbreak)。
這類漏洞的觸發路徑非常單純:設備嘗試讀取一個經過刻意篡改的儲存卷軸或韌體更新檔,而 FatFs 在處理這些異常數據時發生錯誤,導致系統崩潰或被控制。
關鍵漏洞分析與技術脈絡
在披露的七個漏洞中,最值得關注的是 CVE-2026-6682。這是一個整數溢位(Integer Overflow)漏洞,發生在掛載 FAT32 卷軸的過程中。簡單來說,當程式在計算檔案大小時,因為數值過大導致計算結果繞回(Wrap around)成一個很小的數字,但後續的讀取指令卻將其視為正確長度,進而導致記憶體損毀並可能執行任意程式碼。更危險的是,這個漏洞不僅能透過實體 SD 卡觸發,部分設備的韌體更新流程也可能被利用。
其他高風險漏洞則集中在緩衝區溢位(Buffer Overflow)。例如 CVE-2026-6687 涉及 exFAT 的卷標欄位溢位,而 CVE-2026-6688 則與過長的檔名有關。值得注意的是,CVE-2026-6688 的問題在於許多開發者在 FatFs 外層封裝了自定義代碼,使用了不安全的字串複製函數(如 strcpy),將檔名直接拷貝到固定長度的緩衝區中,這使得單純更新 FatFs 庫無法完全解決問題。
除了記憶體損毀,其他漏洞還包括導致設備當機(Divide-by-zero)或導致數據洩漏(讀取到先前刪除的殘留數據),甚至會讓設備在掛載分區表時陷入死鎖(Hang)。
供應鏈的崩潰:缺乏上游維護的困境
這次事件揭露了嵌入式開發中一個極其危險的現象:對單一維護者的高度依賴。FatFs 由一名開發者維護,且在 runZero 嘗試聯繫及透過 JPCERT/CC 協調後,依然沒有得到回應。
這造成了一個嚴重的供應鏈斷層。由於上游(Upstream)沒有提供修補程式,下游(Downstream)的平台供應商,如 Espressif (ESP-IDF)、STMicroelectronics (STM32Cube)、Zephyr、MicroPython 等,必須自行在自己的分叉版本中修補漏洞。對於最終的產品製造商來說,他們可能根本不知道自己使用的 SDK 中包含了一個有缺陷的 FatFs 版本。
AI 驅動的漏洞挖掘:新時代的威脅
值得關注的是 runZero 發現這些漏洞的方法。他們在 2017 年進行人工審計時沒發現問題,但在 2026 年利用 AI 工具(如 GitHub Copilot)快速構建了 Fuzzer(模糊測試工具)。Fuzzer 是一種透過向程式輸入大量隨機或畸形數據,直到程式崩潰來發現漏洞的自動化工具。
這顯示出 AI 已經大幅降低了挖掘記憶體安全漏洞的門檻。如果一個普通的 AI 工作流就能發現這些漏洞,那麼攻擊者同樣能輕易達成。
工程實務建議
如果你正在開發涉及 FAT 或 exFAT 讀寫的韌體,請採取以下行動:
第一,檢查產品中使用的 FatFs 版本,並審查所有與其互動的封裝代碼(Wrapper code),特別是處理檔名與檔案大小的地方,禁止使用 strcpy 等不安全函數。
第二,將所有實體接口(USB、SD 卡槽)以及韌體更新通道視為攻擊面(Attack Surface),實施嚴格的訪問控制。
第三,密切關注你所使用的 SDK 供應商是否發布了針對 FatFs 的修補更新。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。