
摘要
本報告詳細分析了 CVE-2025-25256,這是 Fortinet FortiSIEM 中發現的一個預認証命令注入漏洞。此漏洞源於
phMonitorProcess::handleStorageArchiveRequest
函數中輸入驗證不足,特別是由於
ShellCmd::addParaSafe
的不安全使用。此缺陷允許未經認証的攻擊者執行任意作業系統命令。本報告深入探討漏洞的技術細節,檢查有漏洞的程式碼,並討論此類嚴重安全漏洞在安全解決方案中的影響。它還強調了安全的輸入驗證和軟體開發中縱深防禦原則的重要性。

1. 簡介
資安解決方案旨在保護系統和資料免受惡意活動侵害。然而,與任何複雜軟體一樣,它們也可能包含漏洞。本研究報告聚焦於一個影響 Fortinet FortiSIEM 的嚴重預認証命令注入漏洞,編號為 CVE-2025-25256。FortiSIEM 是一款企業級安全資訊與事件管理 (Security Information and Event Management, SIEM) 解決方案,提供即時事件關聯、用戶與實體行為分析 (User and Entity Behavior Analytic, UEBA)、管理資料庫設定 (Configuration Management Database, CMDB) 以及安全編排、自動化和回應 (Security Orchestration, Automation, and Response, SOAR) 功能 [1]。在如此關鍵的安全產品中發現預認証命令注入漏洞,對用於保護組織基礎設施的工具安全性構成重大威脅。
該漏洞的嚴重性因其被歸類為 CVSSv3 評分 9.8 的嚴重缺陷而更加突出,顯示其影響力和易於攻擊的高潛力 [2]。此外,已觀察到此漏洞的實際攻擊程式碼在現實世界流傳,強調了對未更新系統的即時威脅 [1, 2]。本報告旨在提供 CVE-2025-25256 的全面技術分析,剖析根本原因、攻擊機制以及更新版本中為減輕風險而實施的技術變更。通過檢視此案例,我們可以得出關於安全編碼實踐重要性的更廣泛結論,特別是在安全關鍵應用程式中。
2. CVE-2025-25256 技術分析
2.1. 漏洞概覽
CVE-2025-25256 是一種作業系統命令注入漏洞 (CWE-78),存在於 Fortinet FortiSIEM 中。它允許未經認証的攻擊者在 FortiSIEM 設備的底層作業系統上執行任意命令。該漏洞特別影響
phMonitor
程序,該程序在 TCP 7900 埠監聽,負責監控 FortiSIEM 程序的健康狀況並分配任務 [1, 3]。問題的核心在於對用戶控制輸入的特殊元素未進行適當驗證,隨後用於構造和執行系統命令。
2.2. 根本原因:不安全的輸入驗證
CVE-2025-25256 的主要原因是
phMonitorProcess::handleStorageArchiveRequest
函數中
ShellCmd::addParaSafe
函數的不安全使用。此函數由受控值(特別是 XML 輸入)觸發,在有漏洞的 FortiSIEM 版本中未進行適當驗證 [1]。
ShellCmd::addParaSafe
函數,顧名思義,旨在於將參數加入 shell 命令前進行驗證。然而,其實作被發現不足。它僅僅對引號進行轉義,試圖防止輸入從周圍的字面字符串中跳脫。這種基本的引號轉義是一種薄弱的防禦機制,因為攻擊者常能找到其他方式注入命令,而不依賴僅僅跳脫引號(例如使用反引號、分號或換行符) [1]。
2.3. 有漏洞函數:
phMonitorProcess::handleStorageArchiveRequest
phMonitorProcess
中的
handleStorageArchiveRequest
函數是命令注入的特定入口點。此函數處理 XML 資料,提取諸如
archive_storage_type
、
archive_nfs_server_ip
和
archive_nfs_archive_dir
等參數 [1]。這些提取的值隨後用於構造由系統執行的 shell 命令。
關鍵缺陷發生在將
archive_nfs_server_ip
和
archive_nfs_archive_dir
的值傳遞給
ShellCmd::addParaSafe
時。在有漏洞的版本中,攻擊者可精心設計這些 XML 參數以包含 malicious payload。當 shell 命令被構建並執行時,這些注入的命令將以
phMonitor
程序的權限在 FortiSIEM 系統上運行。
2.4. 程式碼分析:更新前後
通過檢查 FortiSIEM 有漏洞版本與更新版本的程式碼變更,可以清楚了解漏洞。原始文章提供了
phMonitorProcess::handleStorageArchiveRequest
函數的差異,突顯關鍵變更 [1]。
- // Old Code (FortiSIEM 7.3.1)
- int64 __fastcall phMonitorProcess::handleStorageArchiveRequest(
- phMonitorProcess *event_id,
- int a2,
- unsigned int a3,
- void *a4,
- const char *a5,
- void *a6,
- phSockStream *a7)
- {
- // ...SNIP...
- ShellCmd::addParaSafe(&v129, &archive_nfs_server_ip); // [15] Add NFS server IP
- ShellCmd::addParaSafe(&v129, &archive_nfs_archive_dir); // [16] Add archive directory
- // ...SNIP...
- ShellCmd::str[abi:cxx11](v134, &v129); // [18] Build the complete command string
- phMiscUtils::do_system_cancellable(v134[0], (const char *)&requested_time, (bool *)&dword_0 + 1, 0, (unsigned int)&v98, v62); // [19] Execute the system command
- // ...SNIP...
- }
- // New Code (FortiSIEM 7.3.2)
- int64 __fastcall phMonitorProcess::handleStorageArchiveRequest(
- phMonitorProcess *event_id,
- int a2,
- unsigned int a3,
- void *a4,
- const char *a5,
- void *a6,
- phSockStream *a7)
- {
- // ...SNIP...
- ShellCmd::addHostnameOrIpParam(&v129, &archive_nfs_server_ip); // [15] Add NFS server IP
- ShellCmd::addDiskPathParam(&v129, &archive_nfs_archive_dir); // [16] Add archive directory
- // ...SNIP...
- ShellCmd::str[abi:cxx11](v134, &v129); // [18] Build the complete command string
- phMiscUtils::do_system_cancellable(v134[0], (const char *)&requested_time, (bool *)&dword_0 + 1, 0, (unsigned int)&v98, v62); // [19] Execute the system command
- // ...SNIP...
- }
更新版本 (FortiSIEM 7.3.2) 的關鍵變更在於用兩個更具體且推測更安全的函數
ShellCmd::addHostnameOrIpParam
和
ShellCmd::addDiskPathParam
取代
ShellCmd::addParaSafe
[1]。這表明 Fortinet 認識到通用
addParaSafe
函數的不足,並用針對特定輸入類型(IP 位址/主機名稱和磁碟路徑)的函數取代它。這種方法允許應用更嚴格的驗證和驗證規則,有效防止命令注入,確保輸入符合預期格式且不包含 malicious characters 或序列。
2.5. 攻擊機制
CVE-2025-25256 的攻擊涉及精心製作 malicious XML payload,發送到 7900 埠的
phMonitor
程序。XML payload 將包含為
archive_nfs_server_ip
和
archive_nfs_archive_dir
設計的特殊值。由於
ShellCmd::addParaSafe
僅執行基本引號轉義,攻擊者可注入 shell metacharacters(例如
;
、
|
、
&
、
`
)以跳脫預定的命令結構並執行任意命令。例如,若攻擊者將
archive_nfs_server_ip
設為
127.0.0.1; evil_command;
,系統執行的命令將包含
evil_command
[1]。
原始文章概述了觸發注入點的條件 [1]:
-
phMonitor
程序必須以Supervisor
或Worker
模式運行。 -
XML 資料(參數
a6
)必須提供且有效。 -
XML 中的
<scope>
元素必須設為local
。 -
<archive_storage_type>
元素必須設為nfs
。 -
XML 中必須包含
archive_nfs_server_ip
和archive_nfs_archive_dir
。
一旦滿足這些條件,精心製作的輸入被處理,malicious command 將被執行。此漏洞的預認証特性意味著攻擊者無需任何先前認証或認證即可進行攻擊,使其極其危險。
3. 影響與緩解措施
3.1. 漏洞影響
由於其預認証特性以及 FortiSIEM 在組織安全基礎設施中的關鍵角色,CVE-2025-25256 的影響極為嚴重。成功攻擊可能導致:
- 遠端程式碼執行 (RCE): 攻擊者可在 FortiSIEM 設備上執行任意命令,可能導致系統完全被入侵。
- 資料外洩: FortiSIEM 管理或監控的敏感資料可能被存取並外洩。
- 安全運營中斷: SIEM 的入侵可能導致安全事件可見性喪失,使攻擊者在網路內未被察覺地行動。
- 橫向移動: 被入侵的 FortiSIEM 設備可用作跳板,對網路內其他系統發動進一步攻擊。
鑑於 FortiSIEM 常部署在關鍵環境中用於管理與監控安全,其入侵可能對組織整體安全態勢造成深遠影響。
3.2. 緩解措施與最佳實踐
Fortinet 已發布更新程式以解決 CVE-2025-25256。主要緩解措施是將受影響的 FortiSIEM 版本升級至更新版本。Fortinet PSIRT 公告 [2] 和原始研究 [1] 提供受影響版本及其對應解決方案的詳細資訊:
版本 | 受影響 | 解決方案 |
---|---|---|
FortiSIEM 7.4 | 不受影響 | 不適用 |
FortiSIEM 7.3 | 7.3.0 至 7.3.1 | 升級至 7.3.2 或更高版本 |
FortiSIEM 7.2 | 7.2.0 至 7.2.5 | 升級至 7.2.6 或更高版本 |
FortiSIEM 7.1 | 7.1.0 至 7.1.7 | 升級至 7.1.8 或更高版本 |
FortiSIEM 7.0 | 7.0.0 至 7.0.3 | 升級至 7.0.4 或更高版本 |
FortiSIEM 6.7 | 6.7.0 至 6.7.9 | 升級至 6.7.10 或更高版本 |
FortiSIEM 6.6 | 所有 6.6 版本 | 遷移至更新版本 |
FortiSIEM 6.5 | 所有 6.5 版本 | 遷移至更新版本 |
FortiSIEM 6.4 | 所有 6.4 版本 | 遷移至更新版本 |
FortiSIEM 6.3 | 所有 6.3 版本 | 遷移至更新版本 |
FortiSIEM 6.2 | 所有 6.2 版本 | 遷移至更新版本 |
FortiSIEM 6.1 | 所有 6.1 版本 | 遷移至更新版本 |
FortiSIEM 5.4 | 所有 5.4 版本 | 遷移至更新版本 |
除了應用更新程式外,組織應實施以下最佳實踐以增強其安全態勢:
-
限制對
phMonitor
埠 (7900) 的存取: 作為臨時解決方案,限制對 TCP 7900 埠的網路存取可減少攻擊面 [1]。這應通過防火牆規則或網路分段實現,僅允許受信任的系統與phMonitor
程序通信。 - 最小權限原則: 確保 FortiSIEM 及其組件以最低必要權限運行。
- 定期安全審計: 定期進行安全審計和滲透測試,以主動識別並解決漏洞。
-
輸入驗證與清理:
開發者應始終將所有外部輸入視為不可信任,並在用於任何命令執行、檔案操作或資料庫查詢前進行嚴格驗證和驗證。使用特定、環境感知的驗證函數(例如
addHostnameOrIpParam
和addDiskPathParam
)至關重要,而不是依賴通用或薄弱的驗證方法。 - 深度防禦: 實施多層安全控制,確保即使一個控制失敗,其他控制仍可防止或檢測攻擊。
- 保持資訊更新: 定期監控來自供應商和安全研究組織的安全公告,以了解最新的漏洞和更新程式。
4. 結論
Fortinet FortiSIEM 中的 CVE-2025-25256 漏洞提醒我們,即便是安全解決方案也可能存在嚴重缺陷。由於輸入驗證不足導致的預認証命令注入漏洞,凸顯了安全編碼實踐的根本重要性。從通用、薄弱的驗證函數 (
ShellCmd::addParaSafe
) 到更具體且強健的函數 (
ShellCmd::addHostnameOrIpParam
和
ShellCmd::addDiskPathParam
) 的轉換,顯示了環境感知輸入驗證的必要性。
此事件強調了資安領域持續警惕的必要性。組織必須優先進行及時更新、實施強大的網路分段,並遵循安全開發原則,以將此類嚴重漏洞的暴露風險降至最低。從 CVE-2025-25256 中學到的教訓強化了安全是一個持續過程的觀念,從設計和開發階段到部署和維護都需要持續關注細節。