先說結論:管理 Java 網站的團隊,應重新盤點是否仍有使用舊版 Apache Struts 2 的應用,以及是否啟用與 CVE-2016-3081 有關的動態方法呼叫設定。Struts 是協助 Java 網站處理請求和頁面流程的框架;框架往往被包進應用程式內,不能只看伺服器作業系統版本。美國 CISA 在 2026 年 10 月 8 日把這個 2016 年公開的漏洞加入已知遭利用漏洞目錄,代表處置優先順序需要重新評估,並不是說 Apache 今年才揭露缺陷。Apache 原始 S2-032 公告指出,在特定舊版與設定條件下,外部請求可能導致伺服器執行未授權程式碼。本文於台北時間 10 月 12 日重新查核 Apache 原始公告、目前發布頁和 CISA 原始目錄;公開來源並未證明任何特定讀者的網站已經遭攻擊。
背景與前因:Apache Struts 曾被許多企業用來建置 Java 網站。這類框架通常隨應用一起部署在執行環境中,可能出現在正式網站、內部後台、合作夥伴入口或多年未重建的舊服務。Apache 在 2016 年 4 月發布 S2-032 安全公告及修補版,已對當時的開發者提出處置建議。十年後,CISA 的 KEV 目錄新增 CVE-2016-3081,提供的是『此編號已有已知遭利用證據』這項新的威脅優先訊號。KEV 不是受害者名冊,也不會替每家公司列出是否暴露;開發與維運團隊仍須把新的威脅訊號和自己實際部署的版本、設定及可達性連在一起判斷。
原因與前置條件:Apache 原公告把核心條件寫得很清楚:相關 Struts 2.3 舊版啟用了 Dynamic Method Invocation,簡稱 DMI,才符合其描述的攻擊前置條件。DMI 是讓應用依請求動態選擇要執行哪個程式方法的功能;方法可理解為網站程式裡的一段特定操作。公告指出,外部提供的惡意表達式在這種配置下可能被錯誤處理,造成遠端程式碼執行,也就是未經授權的程式指令在伺服器上運作。本文只描述配置與結果,不提供可重現缺陷的請求字串或操作步驟。若應用沒有使用 Struts,或者已採用不受此舊缺陷影響的版本,不能只因同樣是 Java 網站就將它列為本 CVE 受害系統。
影響範圍:Apache S2-032 公告列出的受影響範圍為 Struts 2.3.20 至 2.3.28,但特別排除已修正的 2.3.20.3 與 2.3.24.3;公告同時列出 2.3.28.1 作為當年可升級的修補版。這些是歷史公告用來畫出缺陷邊界的版號,不是鼓勵組織在 2026 年新安裝 2016 年的套件。Apache 現行發布頁在本次查核時顯示 7.4.0 為『best available』,並把有安全問題的舊版放在不建議使用的歷史發行清單。對仍使用 2.3 支線的系統,除了確認 CVE-2016-3081 是否已修正,更應規畫遷移到持續維護的版本,評估相容性、依賴套件和測試成本。
盤點時不能只讀原始碼倉庫中的宣告。企業可能有多個打包檔、舊的部署映像、第三方產品內嵌的 Struts 元件,以及與正式環境不同步的備援節點。對每個應用都應核對實際正在執行的套件版本、發行商修補紀錄、部署時間及 DMI 設定;若透過商業產品或系統套件提供,還須對照該供應商的修補公告,因為供應商可能把修正回移到自己的維護版。單憑表面版號、掃描器的一條提示或曾下載新版安裝包,不能證明正在服務的程序已不受影響。也要釐清哪些服務能從外部接觸,哪些只能由內部網段使用,分別安排更新優先順序。
Apache 當年的暫行建議是盡可能關閉 DMI,或升級至公告列出的修正版。關閉功能可能改變既有應用的路由或操作行為,因此應先由開發者核對業務是否真的使用它,再在測試環境確認變更;不能只在設定文件上寫『停用』而未回讀執行時配置。另一方面,若舊應用仍依賴 DMI,不能因為停用困難就把網路邊界設備視為已完成修補。更完整的處置需要選擇受支援升級路徑、驗證應用功能並保留回復計畫。對已升級的系統,也應留下版本與部署證據,避免日後重複把不同漏洞或已修正節點混為同一事件。
CISA 的原始 KEV 條目將此漏洞描述為可能造成任意程式碼執行,並給出依原廠指示處置的要求。這與 Apache 2016 年公告回答的問題不同:原廠提供技術條件和當時的修補版,CISA 反映新增的已知利用收錄狀態。CISA 條目的期限與政策要求有特定的美國聯邦機關背景,不應直接寫成台灣所有企業都適用的法定期限。KEV 中的勒索軟體活動欄位為未知,不能推論本漏洞必然與特定勒索團體相連。對讀者而言,最有價值的變化是提高遺留應用盤點與修補的優先度,而不是把目錄收錄直接等同於自己已遭入侵。
你可以怎麼做:先從軟體組成清單、建置檔、部署映像和實際運行節點找出使用 Struts 的應用,標記業務負責人、框架版本、DMI 設定及網路接觸面。對落在原廠公告區間、且符合設定條件的系統,優先安排防護與升級;對外可達或承載敏感業務的服務應排在前面。選擇修補時以目前受支援的 Apache 與產品供應商資訊為準,不把十年前的修正版當成今日唯一部署目標。更新後讀回實際套件,確認正常登入、表單提交與權限控管,並檢查備援節點和容器映像是否同步。變更紀錄應註明何時測試、何時上線、誰確認以及尚有哪些例外。
若舊服務近期出現不尋常的程序啟動、管理操作或檔案變動,先由授權人員保留可用日誌、事件時間線和相關版本證據,再與正常維運活動比對。異常現象可能有其他原因,不能只憑某個程序啟動就歸因於 CVE-2016-3081;反過來說,沒有明顯警報也不足以證明系統從未被接觸。需要調查時,應把『是否符合漏洞版本與設定』和『是否真的有攻擊證據』分開判斷。補丁能移除已知軟體缺陷,但若已有可信入侵跡象,還須評估後續隔離與重建,不應只靠升級宣稱事件結束。
目前可以確認的是:Apache 在 2016 年已公開 S2-032 的版本、設定條件及當時修補措施,CISA 在 2026 年 10 月 8 日新收錄 CVE-2016-3081 為已知遭利用漏洞。公開資料仍無法回答每家組織是否留有 2.3 舊支線、DMI 是否啟用、供應商有無回移修補、哪些節點可被接觸,或本地是否存在可信入侵證據。若只看『2016 年漏洞早已過時』,可能漏掉長期未更新的應用;若只看『已知遭利用』四字,又可能把沒有證據的受害推論寫成事實。以資產、執行版、設定、修補與事件紀錄逐一核對,才是此次 KEV 新增對舊版 Java 網站的實際提醒。
官方來源:
- S2-032 – Remote Code Execution can be performed when Dynamic Method Invocation is enabled(Apache Software Foundation)
- Apache Struts Releases(Apache Software Foundation)
- Known Exploited Vulnerabilities Catalog, CVE-2016-3081(美國網路安全暨基礎設施安全局 CISA)
這篇觀察對你有幫助嗎?
支持 Darknoted 持續維護隔離研究環境、資料查核與內容更新。
了解如何支持本站更新紀錄
:完成公開內容與 metadata 更新。