CVE-2018-1261復現和分析
0x00 前言
本文參考了一些資料對CVE-2018-1261進行了復現與分析,內容包括了漏洞情況簡介、漏洞復現、漏洞復現結果分析、總結反思以及參考鏈接。如有謬誤還請指正!如有其他建議,請您多多指教!
0x01 漏洞情況簡介
漏洞名稱:Spring Integration Zip不安全解壓
漏洞編號:CVE-2018-1261
漏洞級別:嚴重(官方定級,比高危還高)[1]
漏洞描述:
在spring-integration-zip.v1.0.1.RELEASE之前的版本中,惡意用戶通過在壓縮文件中構造包含有特定文件名稱的文件(受影響文件格式有bzip2, tar, xz, war, cpio, 7z),應用程序使用spring-integration-zip進行解壓時,會導致跨目錄任意寫入文件漏洞的攻擊。進而有可能被Getshell,遠程控制。
漏洞原理:
攻擊者可以通過構造一個包含名稱帶../前綴的文件的壓縮包,在spring-integration-zip進行解壓時文件跳出解壓文件的目錄限制,創建文件。
漏洞利用前置條件:
使用了spring-integration-zip庫
接收並解壓了來自不可信來源的壓縮文件[2]
0x02 漏洞復現
PoC的核心代碼如下:
PoC所依賴的jar包由Maven進行配置[3]:
PoC所調用的「testzipdata/test1.zip」由這段Python腳本生成[4]:
註:將「testzipdata/test1.zip」放在IDEA工程的「target/classes」目錄下。
PoC的運行結果如圖所示。
我們可以發現文件../../dddwwtest.txt沒有被解壓到文件夾原定的解壓路徑,而文件dddwwtest.txt被解壓到了工程的根目錄。漏洞復現成功。
0x03 漏洞復現結果分析
為了進一步理解漏洞的原理,現在進行斷點調試[5]。
在漏洞的入口點設置斷點,並Step Into這行代碼,如圖所示。
接著Step Into這行代碼,如圖所示。
接著Step Into這行代碼,如圖所示。
此時,我們可以發現UnZipTransformer.doZipTransform()方法被用來處理壓縮包,如圖所示。
通讀doZipTransform()方法的代碼可以發現,在遍歷壓縮包內目錄及文件時,回調ZipEntryCallback中的process()方法對其進行處理,如圖所示。
通讀process()方法的代碼,並對這一行代碼設置斷點:
接著並觀察變數的具體值,我們可以發現這一行代碼這裡沒任何過濾就進行文件路徑和文件名的拼接,如圖所示。
為了更直觀地觀察變數的變化,還可以運用Watches監視器來監視這些表達式的變化:workDirectory.getCanonicalPath()、destinationFile.getCanonicalPath()與destinationFile.getAbsolutePath(),如圖所示。
我們可以發現在執行完第132行後,destinationFile.getCanonicalPath()隨即變成了D:cve_workspaceXXdddwwtest.txt,而不是destinationFile.getAbsolutePath()的D:cve_workspaceXX.原定的解壓路徑3a1ba461-fc75-f4b6-1aa1-26c3e9ad0d4d....dddwwtest.txt。
getAbsolutePath()方法返回的是文件的絕地路徑,而getCanonicalPath()方法也是返迴文件的絕對路徑,但會去除[..]這樣的符號,即返回的是標準的絕地路徑。因此可以推斷:漏洞CVE-2018-1261的成因與getCanonicalPath()方法有關。
在這裡看一下官方的漏洞修復,官方的漏洞修復增加了checkpath()這個路徑檢測方法,如圖所示:
我們可以發現:官方的漏洞修復做了這個判斷:如果字元串destinationFile.getCanonicalPath()的開頭不與字元串workDirectory.getCanonicalPath()匹配,則拋出異常,不予解壓。
0x04 總結反思
Zip不安全解壓漏洞有可能被用於getshell、或選擇覆蓋掉一些配置文件[6],不應忽視; 運用 Maven 管理Java PoC所依賴的Jar包,有助於提高搭建漏洞復現環境的效率;運用Watches等IntelliJ IDEA的調試工具,有助於提高Debug效率。
0x05 參考鏈接
[1] Gyyyy.Spring Integration Zip不安全解壓(CVE-2018-1261)漏洞分析[EB/OL].[2018-5-19].https://mp.weixin.qq.com/s/SJPXdZWNKypvWmL-roIE0Q.
[2] 水清雲影.【代碼審計】Spring Integration Zip不安全解壓(CVE-2018-1261)漏洞分析[EB/OL].[2018-5-19].http://www.cnblogs.com/sqyysec/p/9038892.html.
[4] 羊小弟.Spring Integration Zip不安全解壓(CVE-2018-1261)漏洞復現[EB/OL].[2018-5-19].https://www.cnblogs.com/yangxiaodi/p/9036916.html.
[5] 重複的生活.調試中的step into step over step out[EB/OL].[2014-10-22].https://blog.csdn.net/yagamil/article/details/40372979.
[6] k1n9.Java 文件解壓的安全問題[EB/OL].[2017-12-9].http://k1n9.me/2017/12/09/java-sec-in-decompress/.
歡迎關注我們!一起交流信息安全技術!


TAG:安全狗攻防實驗室 |