更多安全資訊和分析文章請關注啟明星辰ADLab微信公眾號及官方網站(adlab.venustech.com.cn)
一、漏洞概述

漏洞影響了ClickHouse 21.10.2.15版本之前的所有版本。具體漏洞描述如下表所示:
CVE ID
描述
危害
CVESSv3.1得分
CVE-2021-43304
LZ4壓縮算法編碼器解壓惡意的查詢數據時導致堆溢出。
遠程代碼執行
8.8
CVE-2021-43305
LZ4壓縮算法編碼器解壓惡意的查詢數據時導致堆溢出。
遠程代碼執行
8.8
CVE-2021-42387
LZ4壓縮算法編碼器解壓惡意的查詢數據時導致堆越界讀。
拒絕服務或信息泄露
7.1
CVE-2021-42388
LZ4壓縮算法編碼器解壓惡意的查詢數據時導致堆越界讀。
拒絕服務或信息泄露
7.1
CVE-2021-42389
Delta壓縮算法編碼器解壓惡意的查詢數據時導致除0錯誤。
拒絕服務
6.5
CVE-2021-42390
Delta壓縮算法編碼器解壓惡意的查詢數據時導致除0錯誤。
拒絕服務
6.5
CVE-2021-42391
Delta壓縮算法編碼器解壓惡意的查詢數據時導致除0錯誤。
拒絕服務
6.5
二、處置建議

https://github.com/ClickHouse/ClickHouse/releases/
緩解措施:
三、漏洞分析

這些漏洞都存在ClickHouse Server處理壓縮數據的請求處理過程中,ClickHouse Server支持對用戶請求的附帶數據進行壓縮。用戶可以在發起WEB請求時,將decompress標誌設為1即可,舉例如下:
查詢的附帶數據(query.bin)可以按下面的結構進行組織:
ClickHouse支持多種壓縮格式,包括LZ4、Gorilla、Delta等多種壓縮算法。ClickHouse Server根據請求中附帶數據的壓縮算法標識,調用不同的解壓算法來對數據進行解壓。
LZ4壓縮算法是LZ算法系列中的一種,也是目前綜合效率最快的壓縮算法之一。
一個LZ4壓縮塊由多個LZ4序列組成,LZ4序列由以下數據構成,如下圖所示:

Token大小為1字節,高4個bits為不可壓縮數據(literal)的長度(literallength),而低4個bits為可以壓縮數據(match)長度(match length)。如果literallength的值為0,則表示後續數據里沒有literal。由於literal length只有4比特來表示,它的最大值為15。當literal數據的大小大於等於15時,需要在Token字段後添加格外的字節來表示literal的長度(Literal length+)。
Match指重複項,可以壓縮的部分。
src/Compression/LZ4_decompress_faster.cpp的decompressImpl函數在拷貝LZ4序列數據的literal時,沒有判斷複製的數據是否超過目標緩衝區的限制。當需要複製的數據超過目標緩存的大小時,會導致堆溢出。
攻擊者可以構造惡意的LZ4序列數據,其中litera的長度(length變量)大於dest_size,將導致堆溢出。
3.4 CVE-2021-43305漏洞原理
3.5CVE-2021-42388及CVE-2021-42387漏洞原理
漏洞存在src/Compression/LZ4_decompress_faster.cpp的decompressImpl函數中,該函數直接從LZ4壓縮數據中讀取16位無符號偏移量(offset攻擊者可以控制),該偏移量用於計算wildCopy操作的源數據地址。當offset的值為大於copy_amount時(如offset = 0xffff),將導致程序將op地址之前的數據拷貝到op指向的地址中,從而導致越界讀。
ClickHouse支持的DoubleDelta編解碼器、Delta編解碼器、Gorilla編解碼器中都存在被零除的漏洞。它們基於將壓縮緩衝區的第一個字節設置為零。解壓代碼讀取壓縮緩衝區的第一個字節,並對其執行模運算以獲得剩餘字節,當source[0]為0時,CPU對0進行取模時操作將發生除0異常。
四、結束語

參考鏈接:
[1]https://jfrog.com/blog/7-rce-and-dos-vulnerabilities-found-in-clickhouse-dbms/
[2]https://github.com/ClickHouse/ClickHouse
[3]https://thehackernews.com/2022/03/multiple-flaws-uncovered-in-clickhouse.html
啟明星辰積極防禦實驗室(ADLab)
ADLab成立於1999年,是中國安全行業最早成立的攻防技術研究實驗室之一,微軟MAPP計劃核心成員,「黑雀攻擊」概念首推者。截止目前,ADLab已通過CVE累計發布安全漏洞近1100個,通過 CNVD/CNNVD累計發布安全漏洞2000餘個,持續保持國際網絡安全領域一流水準。實驗室研究方向涵蓋操作系統與應用系統安全研究、移動智能終端安全研究、物聯網智能設備安全研究、Web安全研究、工控系統安全研究、雲安全研究。研究成果應用於產品核心技術研究、國家重點科技項目攻關、專業安全服務等。