Spring Security 安全建議

CVE-2015-3192 使用 XML 輸入發動的阻斷服務攻擊 (DoS)

| 2015 年 6 月 30 日 | CVE-2015-3192

描述

XML 外部實體先前已透過發布 http://pivotal.io/security/cve-2013-6429 停用。 如果 DTD 未完全停用,則可以使用內嵌 DTD 宣告來執行稱為 XML 炸彈的阻斷服務攻擊。 根據 XML 結構描述規則,這些宣告既格式良好又有效,但在剖析時可能會導致記憶體不足錯誤。 為了防止此類攻擊,必須停用 DTD 支援,方法是將 DOM 和 SAX API 中的 disallow-doctype-dec 功能設定為 true,並將 StAX API 中的 supportDTD 屬性設定為 false

現在 Spring Framework 在設定從外部來源進行 XML 剖析時,預設會執行此操作。 這主要包括 spring-oxm 中的 Unmarshaller 實作和 spring-web 中的 HttpMessageConverter 實作。

請注意,應用程式可能需要採取進一步的行動,尤其是在使用 StAX 的情況下。 例如,IBM JDK 1.6 和 1.7 除了設定 supportDTD=false 之外,還需要一個環境變數 (請參閱 IBM JDK 參考)。 此外,我們發現單獨使用 supportDTD 並不能防止 JDK JAXP 實作中的所有類型的 DoS 攻擊。 因此,我們建議使用 Woodstox 開源程式庫 進行 StAX 剖析。

以下說明 Spring Framework 中何時使用 StAX

  • SourceHttpMessageConverter -- 預設啟用。 此轉換器是在 3.2 中新增的,而 StAX 支援是在 4.0.1 中新增的,並且在轉換為類型為 javax.xml.transform.stax.StAXSource 的 Spring MVC 控制器方法引數時使用。
  • Jaxb2CollectionHttpMessageConverter -- 預設未啟用。 此轉換器是在 3.2 中新增的。
  • MappingJackson2XmlHttpMessageConverter -- 當類別路徑上存在「jackson-dataformat-xml」時啟用。 此轉換器是在 4.1 中新增的。

受影響的 Spring 產品和版本

  • Spring Framework 3.2.0 至 3.2.13
  • Spring Framework 4.0.0 至 4.1.6
  • 其他不受支援的版本也會受到影響

緩解措施

受影響 Spring Framework 版本的用戶應按以下方式升級

  • 對於 3.2.x,升級到 3.2.14+
  • 對於 4.0.x 和 4.1.x,升級到 4.1.7+

此外,透過 StAX 從外部來源取用 XML 輸入的應用程式也應使用和/或升級到最新版本的 Woodstox 程式庫,例如版本 4.2+ (4.2.1 是 Spring IO Platform 中目前經過策劃的版本)。

關於新增 Woodstox 的注意事項

StAX 定義了一種標準機制,用於在有多個 StAX 實作可用時選擇要使用的實作,包括系統屬性和 WEB-INF/services 下的服務定義。 Woodstox 包括必要的服務定義,因此只需將其新增到類別路徑即可。 但是,某些應用程式伺服器(例如 WebLogic)已經捆綁了(舊版本的)Woodstox,在這種情況下,您可能需要配置伺服器以優先選擇應用程式選擇的版本,請參閱此 關於 prefer-application-packages 的參考

鳴謝

此問題由 NTT DATA Corporation 的 Toshiaki Maki 負責地識別並報告給 Pivotal,他還協助開發和測試解決方案。

參考文獻

歷史

2015 年 6 月 30 日:發布初始漏洞報告。

領先一步

VMware 提供培訓和認證,以加速您的進度。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔。

了解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

檢視全部