XML 外部實體先前已透過發布 http://pivotal.io/security/cve-2013-6429 而被停用。如果 DTD 沒有完全停用,則可以使用內嵌 DTD 宣告來執行阻斷服務攻擊 (Denial of Service attacks),也就是所謂的 XML 炸彈。 這些宣告在 XML 綱要規則中既是格式良好 (well-formed) 且有效的,但在解析時可能會導致記憶體不足錯誤。 為了防止這種攻擊,必須停用 DTD 支援,方法是在 DOM 和 SAX API 中將 disallow-doctype-dec 功能設定為 true,並在 StAX API 中將 supportDTD 屬性設定為 false。
Spring MVC 的 Jaxb2RootElementHttpMessageConverter 也處理使用者提供的 XML,既未停用 XML 外部實體,也未提供停用它們的選項。 Jaxb2RootElementHttpMessageConverter 已被修改為提供一個選項來控制 XML 外部實體的處理,並且該處理現在預設情況下已停用。
受影響的 Spring 產品與版本
Spring MVC 3.0.0 到 3.2.7
Spring MVC 4.0.0 到 4.0.1
更早的不受支援版本可能受到影響
緩解措施
受影響版本的用戶應採取以下緩解措施
3.x 的使用者應升級到 3.2.8 或更高版本
4.x 的使用者應升級到 4.0.2 或更高版本
致謝
這個問題是由 Spase Markovski 報告給 Spring Framework 開發人員的。