資安

CVE-2026-48907:CVSS 10.0 的 Joomla JCE 漏洞,任何人都能丟一個 PHP webshell 進你的站——CISA 限 7 月 7 日前修補

2026.06.18 · 6 次瀏覽
CVE-2026-48907:CVSS 10.0 的 Joomla JCE 漏洞,任何人都能丟一個 PHP webshell 進你的站——CISA 限 7 月 7 日前修補

Joomla 最熱門編輯器的「未認證 profile 匯入」漏洞,把三個設計失誤串成完整遠端執行。它已經在實戰中被打。

分享:

CVE-2026-48907CVSS v4 滿分 10.0,是一個任何人——不需要帳號、不需要點擊——就能在你的 Joomla 站上執行任意 PHP 的漏洞。問題出在 Joomla 生態裡安裝量最大的所見即所得編輯器之一 JCE(Joomla Content Editor,Widget Factory 出品)CISA 在 6 月 16 日把它加進「已知遭利用漏洞(KEV)」清單,並要求聯邦機關在 7 月 7 日前完成修補——這個等級,不是下次 patch window 再說,是今天就要動手。

技術上,這是一條典型的「設計失誤鏈」。根據 YesWeHack 的漏洞分析,攻擊者先濫用 JCE 的 profile 匯入功能,在未認證狀態下建立一個惡意的編輯器設定檔(editor profile);這個 profile 把上傳安全控制關掉、檔案驗證形同虛設,於是攻擊者就能上傳一個 .php webshell 並直接執行,拿到伺服器的持久後門。整條鏈把三個失誤疊在一起:缺少授權檢查(missing authorization)、檔案驗證不足、上傳防護被停用——任何一個補上都能斷鏈,三個同時失守才釀成滿分。

受影響範圍:JCE 1.0.0 至 2.9.99.4 全中。Joomla 雖只佔全球 CMS 約 2–3%,但絕對數量仍是數十萬個站,而 JCE 是其中最常被預裝的編輯器之一;換句話說,這不是冷門元件。揭露時間軸很緊湊:開發者 6 月 3 日釋出 2.9.99.5 修掉未認證上傳,6 月 8 日再補一版 2.9.99.6,6 月 16 日 CISA 確認實戰利用並列入 KEV——從補丁到「政府下最後通牒」只隔不到兩週。PoC 已在 GitHub 公開,意味著掃描與自動化攻擊正在進行。

接下來我會解:這條攻擊鏈的技術細節與攻擊路徑、立刻能套用的補丁與緩解措施對照、可拿去比對日誌的 IOC、以及為什麼「第三方外掛」才是 CMS 時代最被低估的攻擊面。

技術細節:漏洞類型與攻擊路徑

漏洞分類:Improper Access Control(CWE-284)導致未認證 RCE。攻擊複雜度低、無需認證、無需使用者互動——這正是 CVSS 拉到 10.0 的原因。攻擊路徑大致是:

  • 第一步:對 JCE 的 profile 相關端點發出請求,利用缺少的授權檢查,以未認證身分建立或匯入一個自訂 editor profile。
  • 第二步:在該 profile 中把允許的副檔名、目錄與上傳安全選項調成放行(這本是後台管理員才能碰的設定)。
  • 第三步:透過 JCE 的檔案上傳功能丟入 PHP webshell,因驗證已被自家 profile 放行,檔案落到可由 web 存取的目錄。
  • 第四步:瀏覽該 webshell URL 即觸發 PHP 執行,取得指令執行與持久後門。

對 PHP/Laravel/Nginx 環境的延伸建議:就算你不跑 Joomla,這個案例的教訓直接適用——任何「使用者可控的上傳路徑」都應在 Nginx 層擋掉該目錄執行 PHP。範例設定:

# Nginx:禁止上傳目錄執行 PHP(縱深防禦)
location ^~ /images/ {
    location ~* .php$ { deny all; return 403; }
}
location ^~ /media/ {
    location ~* .php$ { deny all; return 403; }
}

三類讀者的立刻行動

  • 系統管理員:立刻把 JCE 升到 2.9.99.6;無法馬上升級就用 WAF/Nginx 規則擋掉對 JCE profile 端點的未認證請求,並對 /images//media/ 等上傳目錄禁止 PHP 執行。
  • 開發者:審查自家專案所有上傳功能的授權檢查與副檔名白名單(不要黑名單),確認上傳目錄不可執行;Laravel 專案用 Storage 搭配私有 disk、產出隨機檔名、永不信任 client 的 MIME。
  • 接案商/顧問:盤點所有受託維護、跑 Joomla + JCE 的客戶站,今天就寄出客戶通告(含版本確認與修補時程),把「替你確認並修補」變成主動服務而非事後救火。

補丁 vs 緩解措施對照

情境做法效果限制
能立即升級JCE 升到 2.9.99.6(直接跳過 2.9.99.5)根因修復,最佳解需測試相容性,但風險低
暫時無法升級WAF/Nginx 擋未認證的 JCE profile 端點請求阻斷攻擊鏈第一步規則需精準,可能誤擋
縱深防禦上傳目錄禁止執行 PHP(見上方 Nginx 設定)就算 webshell 落地也無法執行不修根因,僅止血
已疑似受害下線受影響站、做鑑識、重建乾淨環境清除持久後門成本高、需停機

IOC 與威脅情資

下列為比對日誌時的指標方向(請依自身環境驗證,非窮舉):

  • HTTP 行為:來自單一 IP、針對 index.php?option=com_jce 與 profile 匯入相關參數的未認證 POST 連發。
  • 檔案系統/images//media/ 或 JCE 上傳目錄內出現非預期的 .php.phtml 檔,或近期被竄改、檔名隨機的小檔案(典型 webshell)。
  • profile 異常:後台出現你沒建立過、且把上傳限制全放行的可疑 editor profile(這正是 JCE Profiles Hack 的特徵)。
  • 外連:web 程序對未知 IP 的可疑對外連線(反向 shell / 下載第二階段 payload)。

不會告訴你的事

  • 升級不等於清乾淨。如果你的站在 6 月初到 6 月 16 日之間就已暴露,攻擊者可能早已植入後門;只升 JCE 不做鑑識,等於把入侵者鎖在屋裡。受害站必須假設已被植後門並做完整檢查。
  • 2.9.99.5 不是終點。官方在 6 月 8 日又出了 2.9.99.6 補強,社群討論顯示首版修補後仍有需要收尾之處——別停在「我有升過」,要確認升到的是 2.9.99.6。

這代表的更大趨勢

真正的破口從來不是核心 CMS,而是「第三方外掛」這個沒人負責的灰色地帶。從 WordPress 的備份外掛到今天的 JCE,模式一模一樣:一個高安裝量的元件、一條未認證 RCE、PoC 數日內公開、政府限期修補。揭露到實戰利用的時間窗持續壓縮到「以天計」,意味著「等下次維護日」的舊節奏已經不適用——CMS 安全的重心,正在從「修核心」轉向「盤點並看管每一個外掛」。

常見問題 FAQ

我的 Joomla 沒裝 JCE,需要擔心嗎?

這個特定漏洞只影響裝了 JCE 1.0.0–2.9.99.4 的站。但 Joomla 站常預裝 JCE,請到後台 Extensions 確認是否安裝與版本;其他外掛也應一併盤點。

我已經升到 2.9.99.5 了,還要動嗎?

建議再升到 2.9.99.6。官方 6 月 8 日釋出此版做補強,直接升到最新最保險。

怎麼判斷我的站是否已被入侵?

檢查上傳目錄有無非預期的 .php 檔、後台有無可疑 editor profile、伺服器有無異常外連。若有疑慮,假設已受害並做鑑識與重建。

暫時無法升級怎麼辦?

用 WAF/Nginx 擋掉未認證的 JCE profile 端點請求,並對上傳目錄禁止 PHP 執行;這能止血,但仍應盡快升級修根因。

我的觀點

主流建議是「立刻打補丁」——對,但這只是衛生習慣,不是策略。我的判斷是:「Patch Tuesday」式的月節奏已經死了,CMS 維運要改成「24 小時應變窗口 + 外掛資產清單」。當揭露到 PoC 只剩幾天,你能不能在被掃到之前修好,取決於你「事前是否知道自己裝了哪些外掛、各是什麼版本」——大多數中小企業根本沒有這份清單,這才是真正的風險。對 ScriptWalker 的客戶看護機會非常具體:把「外掛資產盤點 + KEV 自動比對 + 緊急修補 SLA」做成月費型看護服務。像今天這種事件,正是寄一封客戶通告、附上「我們已替你確認 X 站不受影響/已於今日修補」的時刻——這封信帶來的信任,遠比任何行銷文案有效。

資料來源

分享: