【漏洞預警】Redis 頻發高危漏洞

FLy_鵬程萬里發表於2018-06-23

近日白帽匯安全研究院關注到redis頻繁出現漏洞,有安全人員放出redis exp,並且有相關關於redis的漏洞討論,其中多個redis漏洞會引發遠端程式碼執行和拒絕服務攻擊。Redis是美國Redis Labs公司贊助的一套開源的使用ANSI C編寫、支援網路、可基於記憶體亦可持久化的日誌型、鍵值(Key-Value)儲存資料庫,並提供多種語言的API。Lua subsystem是其中的一個支援Lua指令碼語言的子系統。

根據華順信安FOFA系統資料顯示,目前全網共有  94815個系統對外開放。由於Redis是速度非常快的非關係型(NoSQL)記憶體鍵值資料庫,可以儲存鍵和五種不同型別的值之間的對映,被廣泛應用於各類系統平臺或裝置中,該漏洞將影響眾多的企業和廠商,需要相關企業、平臺廠商高度重視。 

 全球分佈情況(僅為分佈情況,非漏洞影響情況)

 

國內分佈情況(僅為分佈情況,非漏洞影響情況) 

漏洞原理與危害 

這些漏洞利用場景為在遠端攻擊者連線訪問到Redis服務後進行執行攻擊。由於Redis服務預設開啟並不需要認證,同時繫結了0.0.0.0這個地址。在外網伺服器執行時,即可對外開放埠。任意攻擊者可通過未授權訪問到redis。或者通過系統的SSRF漏洞利用,訪問到內網中開放的Redis服務,另外服務商雲託管的Redis伺服器也會被利用,訪問到Redis後通過利用這些redis漏洞進行任意程式碼執行或拒絕服務。建議廣大企業廠商對redis進行配置授權訪問。

以下為相關漏洞分析:

00x01 Redis Lua沙盒逃逸漏洞導致可以執行任意字lua位元組碼,進而實現可執行任意程式碼

CVE 編號:CVE-2015-4335

Redis服務端實現了LUA沙盒機制,遮蔽了LUA的OS、檔案操作等部分危險函式呼叫,但是未過濾loadstring函式,通過此機制可實現Redis伺服器記憶體讀寫操作,進而達成程式碼執行目的,因為在可以讀寫任意記憶體地址前提下,我們可以精確控制CClosure物件的f指標,使其執行linux系統的system函式。然後將其L物件記憶體填充為命令字串。遠端攻擊者可執行eval命令利用該漏洞執行任意Lua位元組碼。本文以Centos 6.9 x64 + Redis2.8.0 為例測試執行任意程式碼。

 

 

 

該漏洞影響版本:Redis 2.8.1之前版本和3.0.2之前3.x版本。

00x02 Redis  Lua子系統緩衝區錯誤漏洞,可造成拒絕服務或執行任意程式碼。

CVE 編號:CVE-2018-11218

該漏洞是由於Redis Lua 子系統中存在 cmsgpack 庫存在基於棧的緩衝區溢位,該漏洞源於程式沒有執行正確的記憶體操作。遠端攻擊者可通過傳送請求利用該漏洞造成拒絕服務或執行任意程式碼。本文以Centos 6.9 x64 + Redis3.2.10為例測試執行擊潰Redis服務。

該漏洞影響版本:Redis 3.2.12之前版本、4.0.10之前的4.x版本和5.0 RC2之前的5.x版本。

00x03 Redis  Lua子系統數字錯誤漏洞,可造成拒絕服務或執行任意程式碼。

CVE 編號:CVE-2018-11219

該漏洞由於Redis Lua子系統的struct庫存在整數溢位漏洞。遠端攻擊者可通過傳送請求利用該漏洞執行任意程式碼或造成拒絕服務。本文以Centos 6.9 + Redis 3.2.10 為例測試擊潰Redis服務。

 

 

 

該漏洞影響版本為:Redis 3.2.12之前版本、4.0.10之前的4.x版本和5.0 RC2之前的5.x版本。

 修復建議 

 1、根據官方提供補丁進行修復。 

 2、升級Redis至最新版本。  

參考

[1] https://github.com/360-A-Team/redis_lua_exploit

[2] http://antirez.com/news/119

相關文章