Q:PHP 核心爆出兩個未認證 RCE 漏洞,Moodle 站台該如何處置?

Q:PHP 核心爆出兩個未認證 RCE 漏洞(CVE-2026-109618/109619),Moodle 站台該如何處置?

操作時間
60分
難度
難
適用Moodle版本
不限Moodle版本
操作身份
管理員
操作指引

A:
2026 年 10 月 21 日,PHP 官方同時公布兩個 CVSS v4.0 9.2 的核心漏洞,兩者都可能導致未經認證的遠端程式碼執行(RCE)。因為問題出在 PHP 核心而非 Moodle,所有以 PHP 執行的系統都在影響範圍內,Moodle 只是其中之一。

兩個漏洞

項目CVE-2026-109618CVE-2026-109619
成因記憶體耗盡時的處理瑕疵,初始化不完全導致資料損毀殘留的全域狀態:請求結束後仍留著指向已釋放記憶體的內部狀態,並跨 PHP-FPM worker 的請求延續
觸發途徑低記憶體條件PHP 預設啟用的 Session Upload Progress 功能
CVSS v4.09.29.2
是否需要帳號不需要——未經認證即可嘗試

這比一般的 Moodle 漏洞更需要重視:多數 Moodle 安全公告的漏洞需要先登入、甚至需要高權限角色。這兩個不需要——任何能連到你網站的人都在攻擊面內,而且取得的是整台伺服器的執行權限,不只是 Moodle。

影響與修補版本

你的 PHP 版本處置方式
8.2 以上(官方仍支援)升級到 8.5.12、8.4.27、8.3.36、8.2.35 其中對應的版本
7.4 / 8.0 / 8.1(官方已停止支援)官方不再發布套件,需取官方修補原始碼重新編譯
7.3 以前沒有修補。只能升級 PHP 版本,沒有其他選擇

我們如何分析

在官方正式公布前,我們就依既有的漏洞應變流程進行盤點與準備:

  • 盤點所有維運平台的 PHP 版本與執行模式(PHP-FPM 或 Apache module)——因為 CVE-2026-109619 與 PHP-FPM 的 worker 行為直接相關,執行模式決定了風險高低。
  • 依 PHP 版本分為三類(官方支援中/已停止支援但可重編/無修補),分別決定修補路徑。
  • 在測試機先行驗證緩解措施,確認關閉相關功能後,登入、檔案上傳、排程工作都仍正常,才套用到正式環境。

我們如何處置:分兩階段

第一階段(官方修補釋出前):先關閉 session.upload_progress 並重啟 PHP 服務,阻斷 CVE-2026-109619 的已知觸發途徑。這一步不需要等官方套件,可以立即降低曝險。

# 在 php.ini 設定
session.upload_progress.enabled = 0

# 確認生效
php -i | grep session.upload_progress.enabled

第二階段(官方公布後):PHP 8.2 以上直接更新到修補版本;7.4/8.0/8.1 則以官方修補原始碼重新編譯,並在測試環境驗證後才切換正式環境。

入侵跡象檢查(唯讀,不改動現場)

漏洞公開後,合理的假設是「可能已經被嘗試過」。我們對維運的平台做了唯讀的入侵跡象調查——刻意不修改任何檔案,以免破壞跡證:

  • 程式碼與官方套件的雜湊比對,找出被竄改的檔案
  • 檢查近期檔案異動時間
  • 搜尋 moodledata 內不該存在的 PHP 檔案(這是最典型的 webshell 落點)
  • 比對存取紀錄(access log)
  • 檢查排程工作與對外連線有無異常

若你要自行檢查,這幾個指令可以起步:

# moodledata 內不該有 PHP 檔
find /path/to/moodledata -name "*.php" -type f

# 近 7 天被改過的檔案
find /path/to/moodle -type f -mtime -7 -ls

# 檢查排程
crontab -l; ls -la /etc/cron.d/

若發現異常,請先保留現場再處理——不要急著刪檔或重裝。被竄改的檔案、log 與時間戳是判斷入侵範圍的依據,清掉就查不出來了。

長期建議:讓自己待在有官方更新的版本上

這次事件真正的教訓不在單一漏洞,而在版本的可維護性。PHP 7.4/8.0/8.1 使用者這次必須自行重新編譯才能修補;7.3 以前的使用者則完全沒有選擇。

若你還在 Moodle 4.1,建議升級到 Moodle 4.5 LTS,並搭配 PHP 8.2 以上,才能持續取得 PHP 官方的安全更新。下一次出現同等級的漏洞時,你會是「更新套件就好」,而不是「要自己編譯」或「無解」。

參考來源