1. 程式人生 > >【原創】Spring Data Redis <=2.0.3反序列化漏洞

【原創】Spring Data Redis <=2.0.3反序列化漏洞

反序列化 默認 用戶 字節碼 href http strong comm ons

Spring Data Redis隸屬於Spring Data家族, 提供簡單易用的方式來訪問Redis緩存。

Spring Data Redis在往Redis裏面寫數據的時候,默認會先對數據進行序列化,然後把序列化之後的字節碼寫入Redis;然後當Spring Data Redis從Redis裏取數據的時候,會取出字節碼進行反序列化操作,在反序列化的過程中沒有對目標類進行校驗和過濾,可導致遠程任意代碼執行。

攻擊路徑:

1.首先準備反序列化payload,參考ysoserial系列。

2.把生成的payload寫入Redis中:

redis.set("\xac\xed\x00\x05t\x00\brebeyond

",Payload)

這樣,名為rebeyond的key中就有了我們構造的payload。

最好選擇Redis中已經存在的key,這樣等Spring取數據的時候就可以觸發代碼執行。

3.等待Spring讀取我們已經覆蓋的key,示例如下:

技術分享圖片

4.Spring側的機器成功彈出計算器:

技術分享圖片

調用棧如下:

技術分享圖片

其他:

This vulnerability is tested on jdk1.8.0_144+spring 5.0.3+spring data redis 2.0.3+ commons-collections4:4.0

Common-collections4 is not necessary.Some modifications to payload can be applied to <=jdk8u20 without Common-collections4.

嘗試把這個問題提給Spring,不過Spring認為Redis在內網,開發人員有必要保證Redis的安全,所以沒有認可該問題,只是更新了他們的產品guidelines ,讓用戶確保自己的Redis用在安全網絡中。下圖是pivotal的答復。但是我覺得認為Redis在內網就是安全的有點太樂觀,我覺得對於spring來講更好的解決方案是把默認的序列號引擎由DefaultDeserializer 改為JsonDeserializer:)

技術分享圖片

[0] https://jira.spring.io/browse/DATAREDIS-780

[1] https://github.com/spring-projects/spring-data-redis/commit/1f6790b10099f26c23c46ae5a099ba1023f055b1

【原創】Spring Data Redis <=2.0.3反序列化漏洞