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,這意味著透過之前的漏洞,如果以下所有條件都為真,則可以執行任意程式碼:

  • 正在透過呼叫 SecurityJackson2Modules.getModules(ClassLoader) 或 SecurityJackson2Modules.enableDefaultTyping(ObjectMapper) 利用 Spring Security 的 Jackson 支援
  • 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
  • 更舊的不受支援的版本也受到影響

緩解措施

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

  • 使用已知不在 getServletPath() 和 getPathInfo() 返回值中包含路徑引數的 Servlet 容器
  • 升級到 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.x 版本開始完全移除。

致謝

該問題由 NTT DATA Corporation 的 Shumpei Asahara 和 Yuji Ito 發現,並負責任地報告給 Pivotal。

參考資料

CVE-2016-6652 Spring Data JPA 盲注 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
  • 其他不受支援的版本也受到影響

緩解措施

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

  • 建議使用者升級到 1.10.4 版(Hopper SR4)或 1.9.6 版(Gosling SR6)的 Spring Data JPA。這些版本包含對傳遞給資料訪問層的 <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

描述

在使用白標檢視處理授權請求時,response_type 引數值被作為 Spring SpEL 執行,這使得惡意使用者可以透過精心構造 response_type 的值來觸發遠端程式碼執行。

受影響的 Spring 產品和版本

  • 2.0.0 到 2.0.9
  • 1.0.0 到 1.0.5

緩解措施

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

  • 1.0.x 使用者不應使用白標檢視進行批准和錯誤頁面
  • 2.0.x 使用者不應使用白標檢視進行批准和錯誤頁面,或者升級到 2.0.10 或更高版本

致謝

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

參考資料

CVE-2016-2173 Spring AMQP 中的遠端程式碼執行

危急 | 2016 年 4 月 11 日 | CVE-2016-2173

描述

類 org.springframework.core.serializer.DefaultDeserializer 不會根據白名單驗證反序列化物件。透過提供一個精心構造的序列化物件,例如 Chris Frohoff 的 Commons Collection 小工具,可以實現遠端程式碼執行。

受影響的 Spring 產品和版本

  • 1.0.0 到 1.5.4

緩解措施

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

  • 所引用的類 (DefaultDeserializer) 不會被任何 Spring 應用程式上下文自動註冊;使用者在使用此類的物件時,如果來自不可信來源,應像直接使用 ObjectInputStream 一樣謹慎。
  • Spring AMQP 有一個(可選的)訊息轉換器可以使用此反序列化器;從 1.5.5 版本開始,該轉換器現在可以配置一個可接受的反序列化包/類的白名單。
  • Spring AMQP 還有一個 SimpleMessageConverter,它*是*預設配置的;它不使用反序列化器,但內部使用 ObjectInputStream;它現在也可以配置一個包/類的白名單。
  • 建議使用者在 RabbitMQ 環境中可能接收到不受信任的資料時,不要使用 Java 序列化;如果使用,應配置轉換器以允許接受的物件。
  • 可能面臨此漏洞的使用者應升級到 Spring AMQP 1.5.5 或更高版本並配置白名單。

致謝

漏洞發現者:Code White 的 Matthias Kaiser (www.code-white.com)

參考資料

CVE-2015-5258 Spring Social CSRF

| 2015 年 11 月 12 日 | CVE-2015-5258

描述

當針對 OAuth 2 API 提供商授權應用程式時,Spring Social 容易受到跨站請求偽造 (CSRF) 攻擊。攻擊涉及惡意使用者使用虛假帳戶啟動 OAuth 2 授權流程,但透過誘騙受害者在其瀏覽器中訪問回撥請求來完成它。因此,攻擊者將透過虛假提供商帳戶訪問受害者在易受攻擊站點上的帳戶。

受影響的 Spring 產品和版本

  • Spring Social Core 1.0.0 到 1.0.3
  • Spring Social Core 1.1.0 到 1.1.2

緩解措施

受影響的 Spring Social 版本的使用者應按如下方式升級

  • 對於 Spring Social 1.0.x 升級到 1.1.3+
  • 對於 Spring Social 1.1.x 升級到 1.1.3+

在上述版本中,Spring Social 要求回撥請求中存在一個 `state` 引數。如果未找到,則會丟擲 IllegalStateException,並且授權流程終止。

致謝

該問題最初由 Include Security 的 Kris Bosch 發現。然後,sourceclear (https://srcclr.com) 的 Paul Ambrosini 識別出根本原因、易受攻擊的庫和易受攻擊的程式碼。

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有