CVE-2017-4995: Jackson 配置允許透過未知的“反序列化小工具”執行程式碼
描述
當配置為啟用預設型別(default typing)時,Jackson 存在一個反序列化漏洞,可能導致任意程式碼執行。Jackson 透過將已知的“反序列化小工具”(deserialization gadgets)列入黑名單來修復此漏洞。
Spring Security 將 Jackson 配置為啟用全域性預設型別(global default typing),這意味著透過之前的漏洞,如果滿足以下所有條件,則可以執行任意程式碼
- 透過呼叫 SecurityJackson2Modules.getModules(ClassLoader) 或 SecurityJackson2Modules.enableDefaultTyping(ObjectMapper) 來利用 Spring Security 的 Jackson 支援
- 使用 Jackson 反序列化不受信任的資料。Spring Security 不使用 Jackson 執行反序列化,因此這是使用者的明確選擇。
- 在類路徑中存在一個未知的(Jackson 尚未將其列入黑名單)允許執行程式碼的“反序列化小工具”(deserialization gadget)
Jackson 提供了黑名單方法來防範此類攻擊,但當 Spring Security 啟用預設型別(default typing)時,Spring Security 應該主動阻止未知的“反序列化小工具”(deserialization gadgets)。
受影響的 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 版本相容。如果使用者明確選擇啟用全域性預設型別(global default typing),則會恢復之前潛在危險的配置。