Hutool資源消耗漏洞 CVE-2022-4565

0x01 概述
Hutool 是一個Java工具庫,提供了豐富的工具和方法,方便開發(fā)者在Java應(yīng)用程序中進行各種常見任務(wù)的處理。它具有簡單易用、功能豐富、性能優(yōu)越等特點,被廣泛用于Java開發(fā)中。
筆者通過對數(shù)百個真實項目引入組件的分析選出了Hutool組件的常見漏洞進行分析。本次分析的是CVE-2022-4565,Hutool-core執(zhí)行unzip操作時的資源消耗漏洞。
0x02 組件使用場景
Hutool-core組件包括Bean操作、日期、各種Util等,其中的ZipUtil類在壓縮文件,解壓文件等操作會被使用。
0x03 漏洞信息
3.1 漏洞簡介
漏洞名稱:資源消耗漏洞
漏洞編號:CVE-2022-4565
漏洞類型:CWE-400 不受控制的資源消耗
CVSS評分:CVSS v3.1:7.5
漏洞危害等級:高危
3.2 漏洞概述
該庫的ZipUtil類的unzip函數(shù)默認不檢測壓縮文件的解壓大小,因此解壓壓縮文件的時候可能造成資源消耗。
3.3 漏洞利用條件
使用Hutool默認的unzip函數(shù),并且未對壓縮文件解壓的數(shù)據(jù)大小進行校驗會導(dǎo)致該漏洞。
3.4 影響版本
Hutool-core 4.4.2 ~ 5.8.10
3.5 漏洞分析
資源消耗漏洞是指惡意用戶或攻擊者通過特定的方式使用系統(tǒng)資源,導(dǎo)致系統(tǒng)資源(如CPU、內(nèi)存、磁盤空間、網(wǎng)絡(luò)帶寬等)耗盡,從而影響系統(tǒng)的正常運行和可用性。
該類漏洞可能造成DoS(Denial of Sevice,DoS)攻擊,導(dǎo)致系統(tǒng)崩潰或死機。另外,在資源耗盡的情況下系統(tǒng)性能會下降,因此可能無法處理其他重要的安全事件或阻止攻擊者使用其他已知的漏洞。
Hutool-core組件產(chǎn)生該漏洞的原因在于默認的unzip傳入的limit參數(shù)(限制解壓后的大?。?1。

limit為-1時,不會進行zipFileSize的檢測,zipFileSize為壓縮文件內(nèi)所有文件未壓縮大小之和。

3.6 漏洞復(fù)現(xiàn)
1.構(gòu)造Zip Bomb文件
ZipBomb的原理是創(chuàng)建一個文件,該文件包含相同的符號并被壓縮,由于文件包含了相同的信息,所以其壓縮的文件會比自己小許多。對于無限長度的重復(fù)字節(jié)來說,使用DEFLATE 壓縮算法的壓縮器有接近1032的壓縮率(壓縮率=壓縮前大小/壓縮后大小),對于部分惡意構(gòu)造的Zip,壓縮比甚至能達到28000000:1,也就是說10MB的壓縮文件最后能解壓出281TB的文件。
筆者僅作測試,故而構(gòu)造約為1024壓縮率的Zip Bomb。
制作Zip Bomb文件的代碼如下:

2.使用Hutool組件的unzip函數(shù)對壓縮文件進行解壓。

3.查看結(jié)果
1.08MB的壓縮文件成功解壓出0.97GB的文件。

3.7 漏洞修復(fù)
漏洞修復(fù)的辦法有如下幾種:
1.升級Hutool至5.8.11版本
其修復(fù)原理是在解壓時調(diào)用了checkZipBomb的方法,計算文件的壓縮率,如果壓縮率大于100則視解壓的文件為Zip Bomb文件。

該修復(fù)方案可通過修改包管理文件(pom.xml,build.gradle),隨后重新構(gòu)建項目完成。
2.手動修改源碼
第一種修復(fù)方案的本質(zhì)是代碼的Patch,對解壓文件內(nèi)的壓縮率進行了校驗,所以也可以通過自己實現(xiàn)相關(guān)校驗代碼避免漏洞的產(chǎn)生。

該修復(fù)方案可通過下載組件源碼,手動Patch實現(xiàn)修復(fù),不整體升級組件可保證項目的其余部分不受影響。
3.設(shè)置磁盤配額
對用戶和進程設(shè)置合理的磁盤配額,限制其使用的磁盤空間,防止惡意使用。
以Ubuntu為例。
首先確保文件系統(tǒng)支持磁盤配額,在掛載文件系統(tǒng)的時候添加usrquota 和 grpquota參數(shù)。
sudo mount -o remount,usrquota,grpquota /dev/sda1 /mnt
隨后安裝磁盤配額工具。
sudo apt-get install quota
再然后配置磁盤配額,設(shè)置用戶 user1 的磁盤配額限制為 1GB。
sudo setquota -u user1 1048576 1048576 0 0 /mnt
其中,參數(shù)含義依次為:用戶,硬限制(1KB為單位),軟限制(1KB為單位),索引節(jié)點的軟限制,索引節(jié)點的硬限制,以及文件系統(tǒng)路徑。
最后生成磁盤配額數(shù)據(jù)庫,啟動磁盤配額。
sudo quotacheck -cum /mnt
sudo quotaon /mnt
該修復(fù)方案可以在代碼存在資源消耗漏洞時防止惡意壓縮文件對其他用戶和系統(tǒng)造成影響。
安全工程師:hu1y40
2023 年 8 月 4 日晚?
?作者:洞源實驗室?
