Q:PHP 核心爆出兩個未認證 RCE 漏洞,Moodle 站台該如何處置?
Q:PHP 核心爆出兩個未認證 RCE 漏洞(CVE-2026-109618/109619),Moodle 站台該如何處置?
A:
2026 年 10 月 21 日,PHP 官方同時公布兩個 CVSS v4.0 9.2 的核心漏洞,兩者都可能導致未經認證的遠端程式碼執行(RCE)。因為問題出在 PHP 核心而非 Moodle,所有以 PHP 執行的系統都在影響範圍內,Moodle 只是其中之一。
兩個漏洞
| 項目 | CVE-2026-109618 | CVE-2026-109619 |
|---|---|---|
| 成因 | 記憶體耗盡時的處理瑕疵,初始化不完全導致資料損毀 | 殘留的全域狀態:請求結束後仍留著指向已釋放記憶體的內部狀態,並跨 PHP-FPM worker 的請求延續 |
| 觸發途徑 | 低記憶體條件 | PHP 預設啟用的 Session Upload Progress 功能 |
| CVSS v4.0 | 9.2 | 9.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 官方的安全更新。下一次出現同等級的漏洞時,你會是「更新套件就好」,而不是「要自己編譯」或「無解」。
參考來源
- 維聖資訊完整說明:PHP 核心 RCE 雙漏洞(CVE-2026-109618/109619)
- PHP 官方安全公告:https://www.php.net/
