Spring Security 安全公告

CVE-2017-8046:Spring Data REST 中 PATCH 請求的 RCE

嚴重 | 2017 年 9 月 21 日 | CVE-2017-8046

描述

提交到使用 Spring Data REST 支持的 HTTP 資源伺服器的惡意 PATCH 請求可以使用特製的 JSON 資料來執行任意 Java 程式碼。

受影響的 Spring 產品和版本

  • Spring Data REST 版本早於 2.6.9 (Ingalls SR9),3.0.1 (Kay SR1)
  • Spring Boot(如果使用 Spring Data REST 模組)版本早於 1.5.9,2.0 M6

緩解措施

受影響版本的用戶應採取以下緩解措施

  • 已修復此問題的版本包括:<ul><li>Spring Data REST 2.6.9 (Ingalls SR9, Oct. 27th, 2017)</li><li>Spring Data REST 3.0.1 (Kay SR1, Oct. 27th 2017)</li><li>Spring Boot 1.5.9 (Oct, 28th 2017)</li><li>Spring Boot 2.0 M6 (Nov. 6th 2017)</li></ul>

致謝

此漏洞由 Semmle 和 lgtm.com 的 Man Yue Mo 負責地報告。

參考文獻

CVE-2017-8045:spring-amqp 中的遠端程式碼執行

| 2017 年 9 月 19 日 | CVE-2017-8045

描述

在受影響版本的 Spring AMQP 中,當 org.springframework.amqp.core.Message 轉換為字串時,可能會不安全地還原序列化。可以製作惡意負載來利用這一點並啟用遠端程式碼執行攻擊。

受影響的 Spring 產品和版本

  • Spring AMQP 版本早於 1.7.4、1.6.11 和 1.5.7

緩解措施

受影響版本的用戶應採取以下緩解措施

  • 已修復此問題的版本包括:<ul><li>Spring AMQP: 2.0.0, 1.7.4, 1.6.11, 1.5.7</li></ul>

致謝

此漏洞由 Semmle 和 lgtm.com 的 Man Yue Mo 負責地報告。

參考文獻

CVE-2017-8039:Spring Web Flow 中的資料繫結表達式漏洞

| 2017 年 9 月 15 日 | CVE-2017-8039

描述

此 CVE 解決了利用與 CVE-2017-4971 下描述的相同漏洞的第二個途徑。

不更改 MvcViewFactoryCreator useSpringBinding 屬性的值的應用程式,該屬性預設為停用(即設定為 “false”),可能會受到處理表單提交但沒有 的檢視狀態中的惡意 EL 表達式攻擊子元素來宣告明確的資料繫結屬性對應。

受影響的 Spring 產品和版本

  • Spring Web Flow 2.4.0 至 2.4.5
  • 較舊的不支援版本也會受到影響

緩解措施

受影響版本的用戶應採取以下緩解措施

  • 2.4.x 用戶應升級到 2.4.6

請注意,通常這是一個好習慣,建議始終在檢視狀態中使用明確的資料繫結宣告,以防止表單提交在不應設定的目標物件上設定欄位。

使用 JSF 的 Spring Web Flow 用戶不受此報告的影響。

致謝

此問題由安全研究員 he1renyagao 發現。

參考文獻

CVE-2017-4995:Jackson 配置允許使用未知的「序列化小工具」執行程式碼

| 2017 年 6 月 8 日 | CVE-2017-4995

描述

當配置為啟用預設類型時,Jackson 包含一個 還原序列化漏洞,可能導致任意程式碼執行。 Jackson 通過將已知的「還原序列化小工具」列入黑名單來修復此漏洞。

Spring Security 配置 Jackson 時啟用 全域預設類型,這意味著如果滿足以下所有條件,則可以通過先前的漏洞利用來執行任意程式碼

  • Spring Security 的 Jackson 支援正在通過調用 SecurityJackson2Modules.getModules(ClassLoader) 或 SecurityJackson2Modules.enableDefaultTyping(ObjectMapper) 來利用
  • Jackson 用於還原序列化不受信任的資料。 Spring Security 不使用 Jackson 執行還原序列化,因此這是用戶的明確選擇。
  • 在類別路徑上存在一個未知的(Jackson 尚未將其列入黑名單)允許程式碼執行的「還原序列化小工具」

Jackson 提供了一種黑名單方法來防止此類型的攻擊,但當 Spring Security 啟用預設類型時,Spring Security 應該主動阻止未知的「還原序列化小工具」。

受影響的 Spring 產品和版本

  • Spring Security 4.2.0.RELEASE - 4.2.2.RELEASE
  • Spring Security 5.0.0.M1

緩解措施

受影響版本的用戶應採取以下緩解措施

  • 已修復此問題的版本包括:<ul><li>Spring Security: 4.2.3.RELEASE+</li><li>Spring Security: 5.0.0.M2+</li></ul>
  • 此修復可確保預設情況下僅還原序列化明確對應的類別。 使用明確對應的類別的效果是建立一個與所有支援的 Jackson 版本一起使用的白名單。 如果用戶明確選擇 <a href='https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization#11-global-default-typing'>全域預設類型</a>,則會還原先前可能危險的配置。

參考文獻

CVE-2017-4971:Spring Web Flow 中的資料繫結表達式漏洞

| 2017 年 5 月 31 日 | CVE-2017-4971

描述

不更改 MvcViewFactoryCreator useSpringBinding 屬性的值的應用程式,該屬性預設為停用(即設定為“false”),可能會受到處理表單提交但沒有 的檢視狀態中的惡意 EL 表達式攻擊子元素來宣告明確的資料繫結屬性對應。

受影響的 Spring 產品和版本

  • Spring Web Flow 2.4.0 至 2.4.4
  • 較舊的不支援版本也會受到影響

緩解措施

受影響版本的用戶應採取以下緩解措施

  • 2.4.x 用戶應升級到 2.4.5
  • 請注意,通常這是一個好習慣,建議始終在檢視狀態中使用明確的資料繫結宣告,以防止表單提交在不應設定的目標物件上設定欄位。
  • 使用 JSF 的 Spring Web Flow 用戶不受此報告的影響。

致謝

此問題由 Gotham Digital Science 的 Stefano Ciccone 發現

參考文獻

CVE-2016-9879 路徑變數中的編碼“/”

| 2016 年 12 月 28 日 | CVE-2016-9879

描述

Spring Security 在處理安全約束時不考慮 URL 路徑參數。 通過向請求添加帶有編碼“/”的 URL 路徑參數,攻擊者可能能夠繞過安全約束。 此問題的根本原因是 Servlet 規範中處理路徑參數的方式不明確(見下文)。 一些 Servlet 容器在 getPathInfo() 返回的值中包含路徑參數,而另一些則不包含。 Spring Security 使用 getPathInfo() 返回的值作為將請求對應到安全約束的過程的一部分。 路徑參數的意外出現可能會導致約束被繞過。

Apache Tomcat (所有目前版本) 的使用者不受此漏洞的影響,因為 Tomcat 遵循先前由 Servlet 專家組提供的指導,並從 getContextPath()、getServletPath() 和 getPathInfo() [1] 返回的值中刪除路徑參數。

其他基於 Apache Tomcat 的 Servlet 容器的使用者可能會或可能不會受到影響,具體取決於是否修改了路徑參數的處理方式。

已知 IBM WebSphere Application Server 8.5.x 的使用者會受到影響。

其他實作 Servlet 規範的容器的使用者可能會受到影響。

[1] https://issues.apache.org/bugzilla/show_bug.cgi?id=25015

受影響的 Spring 產品和版本

  • Spring Security 3.2.0 - 3.2.9
  • Spring Security 4.0.x - 4.1.3
  • Spring Security 4.2.0
  • 較舊的不支援版本也會受到影響

緩解措施

採用以下緩解措施之一將防止此漏洞。

  • 使用已知的 Servlet 容器,該容器不會在 getServletPath() 和 getPathInfo() 的回傳值中包含路徑參數。
  • 升級到 Spring Security 3.2.10、4.1.4 或 4.2.1 會拒絕帶有 RequestRejectedException 的請求,如果偵測到編碼後的 "/"。 注意:如果您想要停用此功能,可以將 DefaultHttpFirewall.allowUrlEncodedSlash 設定為 true 來停用。 然而,停用此功能意味著應用程式容易受到攻擊(在 getServletPath() 或 getPathInfo() 中回傳路徑參數的容器中)。

致謝

此問題由 NTT DATA Corporation 的 Shumpei Asahara 和 Yuji Ito 發現,並以負責任的態度向 Pivotal 回報。

參考文獻

CVE-2016-9878 Spring Framework ResourceServlet 中的目錄遍歷漏洞

| 2016 年 12 月 21 日 | CVE-2016-9878

描述

提供給 ResourceServlet 的路徑未正確清理,因此暴露於目錄遍歷攻擊。

受影響的 Spring 產品和版本

  • Spring Framework 4.3.0 至 4.3.4
  • Spring Framework 4.2.0 至 4.2.8
  • Spring Framework 3.2.0 至 3.2.17
  • 較舊的不支援版本也會受到影響

緩解措施

受影響版本的用戶應採取以下緩解措施

  • 4.3.x 的使用者應升級到 4.3.5
  • 4.2.x 的使用者應升級到 4.2.9
  • 3.2.x 的使用者應升級到 3.2.18

請注意,很少有應用程式會使用 ResourceServlet。 自 3.0 版(大約 2009 年)以來,它通常已被 ResourceHttpRequestHandler 和相關類別取代,這些類別預設使用,並提供更進階的功能,請參閱參考文件中的「提供資源」。 ResourceServlet 現在在 3.2.x 和 4.x 中已被棄用,並從版本 5 開始完全移除。

致謝

此問題由 NTT DATA Corporation 的 Shumpei Asahara 和 Yuji Ito 發現,並以負責任的態度向 Pivotal 回報。

參考文獻

CVE-2016-6652 Spring Data JPA Blind SQL 注入漏洞

| 2016 年 9 月 30 日 | CVE-2016-6652

描述

使用手動宣告的 JPQL 查詢傳遞到使用者定義的 Spring Data 儲存庫查詢方法的 Sort 實例會按原樣傳遞到持久層提供者,並允許攻擊者將任意 JPQL 注入到 ORDER BY 子句中,他們可以使用這些子句根據查詢結果的元素順序變化(取決於注入的 JPQL)得出關於未公開欄位的結論。

如果 Sort 實例是從不可信任的來源建立的(例如,Web 請求參數),則尤其會發生這種情況。

受影響的 Spring 產品和版本

  • Spring Data JPA 1.10.2、1.9.4
  • 其他不受支援的版本也受到影響

緩解措施

受影響版本的用戶應採取以下緩解措施

  • 建議使用者升級到 Spring Data JPA 1.10.4 版 (Hopper SR4) 或 1.9.6 版 (Gosling SR6)。 這些版本包含對傳遞到資料存取層的 <code>Sort</code> 實例的清理,並且只允許引用網域物件欄位和用於支援查詢方法的 JPQL 中的別名。
  • 如果使用者仍然需要將複雜的排序表達式傳遞到資料存取層,他們可以使用新引入的 <code>JpaSort.unsafe(…)</code> 來重新實例化舊的行為。

致謝

此漏洞由 Silverskin Information Security 的 Niklas Särökaari 以及來自… 的 Joona Immonen、Arto Santala、Antti Virtanen、Michael Holopainen 和 Antti Ahola 負責任地回報。

CVE-2016-4977 Spring Security OAuth 中的遠端程式碼執行 (RCE) 漏洞

| 2016 年 7 月 5 日 | CVE-2016-4977

描述

當使用 whitelabel 視圖處理授權請求時,response_type 參數值會作為 Spring SpEL 執行,這使得惡意使用者能夠透過製作 response_type 的值來觸發遠端程式碼執行。

受影響的 Spring 產品和版本

  • 2.0.0 至 2.0.9
  • 1.0.0 至 1.0.5

緩解措施

受影響版本的用戶應採取以下緩解措施

  • 1.0.x 的使用者不應使用 whitelabel 視圖進行批准和錯誤頁面
  • 2.0.x 的使用者應避免使用 whitelabel 視圖進行批准和錯誤頁面,或升級到 2.0.10 或更高版本

致謝

此問題由 David Vieira-Kurz (@secalert) 發現,並由 Oliver Schoenherr 代表 Immobilien Scout GmbH 回報。

參考文獻

搶先一步

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

了解更多

取得支援

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

了解更多

即將到來的活動

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

查看全部