bignum庫遭受S3 Bucket劫持攻擊

0x00 事件背景
NPM(Node Package Manager)是Node.js的軟件包管理器,用于管理和分發(fā)JavaScript代碼庫。通過NPM,用戶可以方便地安裝、更新和刪除JavaScript庫,以及管理項(xiàng)目的依賴關(guān)系。
node-pre-gyp是一個(gè)用于簡化 Node.js 本機(jī)模塊構(gòu)建和發(fā)布的工具,它提供了統(tǒng)一的構(gòu)建和安裝流程,并自動處理不同平臺和架構(gòu)的差異。這樣,開發(fā)人員可以更方便地創(chuàng)建和分發(fā)本機(jī)模塊,同時(shí)提供更好的跨平臺兼容性和易用性。
S3 ?Bucket是 AWS (Amazon Web Services ,亞馬遜云) 提供的一種存儲資源,允許用戶通過 Internet 存儲和檢索海量數(shù)據(jù)。它作為可擴(kuò)展且安全的對象存儲服務(wù),可存儲文件、文檔、圖像、視頻和任何其他類型的數(shù)字內(nèi)容。S3 Bucket可以使用唯一的 URL 進(jìn)行訪問,使其廣泛用于各種用途,例如網(wǎng)站托管、數(shù)據(jù)備份和歸檔、內(nèi)容分發(fā)和應(yīng)用程序數(shù)據(jù)存儲。
近期Node.js使用的開源包bignum由于Bucket被劫持導(dǎo)致用戶在安裝該包時(shí)會下載惡意軟件。
0x01 事件過程
2023年1月
bignum下載預(yù)構(gòu)建版本的S3 Bucket被刪除。
2023年5月24日
GitHub Advisory Database(GAD)報(bào)告 v0.12.2 到 v0.13.0版本的 bignum 包使用 node-pre-gyp 下載預(yù)構(gòu)建的二進(jìn)制版本。這些二進(jìn)制文件發(fā)布在一個(gè)現(xiàn)已過期的 S3 Bucket上,該Bucket已被惡意第三方占用,用戶安裝bignum時(shí)會下載惡意的二進(jìn)制文件,這些惡意軟件會從用戶計(jì)算機(jī)中竊取數(shù)據(jù)。
0x02 技術(shù)分析
本次bignum存在問題的版本為v0.13.0,v0.12.5,v0.12.4,v0.12.3,v0.12.2,筆者下載的是v0.13.0。
對下載的預(yù)構(gòu)建文件進(jìn)行分析。發(fā)現(xiàn)存在一些獲取Linux系統(tǒng)相關(guān)信息的函數(shù)。這與bignum本身提供的功能不符,是惡意軟件的特征。

對該惡意軟件進(jìn)行反匯編分析。該惡意文件的功能是收集執(zhí)行該文件的用戶信息以及系統(tǒng)相關(guān)信息,并通過User-Agent字段發(fā)送給了攻擊者所接管的S3 Bucket。

查看該開源包的Github倉庫,發(fā)現(xiàn)其2016年6月15日提交的commit引入了node-pre-gyp工具。相關(guān)package.json文件配置為,在npm install bignum之前,會安裝node-pre-gyp工具,并在npm install時(shí),從https[:]//rvagg-node.s3-us-west-2.amazonaws[.]com下載預(yù)編譯的二進(jìn)制文件,如果預(yù)編譯的二進(jìn)制文件無法使用,才在本地進(jìn)行構(gòu)建。

該功能并無漏洞,攻擊行為的產(chǎn)生在于2019年10月20日的新版本v0.13.1的bignum棄用了該預(yù)構(gòu)建方法。而其在今年刪除了持有的S3 Bucket,導(dǎo)致惡意第三方接管了該Bucket,因而舊版本的bignum會從該Bucket下載惡意軟件。

綜上,攻擊的具體過程如下:
01
1bignum包的開發(fā)者啟用S3 Bucket供用戶下載預(yù)構(gòu)建二進(jìn)制文件。
02
用戶可從該S3 Bucket下載預(yù)構(gòu)建二進(jìn)制文件。
03
bignum包更新棄用該預(yù)構(gòu)建功能,并刪除對應(yīng)的S3 Bucket。
04
攻擊者接管該Bucket(創(chuàng)建同名Bucket即可)。
05
攻擊者上傳與之前同樣Path的文件。
06
用戶安裝時(shí)自動下載該惡意文件。

0x03 相關(guān)反應(yīng)
2023年5月24日,GDA報(bào)告該bignum的S3 Bucket被劫持,并在其Github倉庫標(biāo)識,標(biāo)識符為GHSA-7cgc-fjv4-52x6。

2023年6月20日,Virustotal查詢該惡意文件,一家廠商對該文件進(jìn)行標(biāo)記。

0x04 事件啟示
本次事件采用了一個(gè)較為新穎的攻擊手法,結(jié)合了云存儲的使用,通過創(chuàng)建同名的S3 Bucket并構(gòu)造Path使得安裝舊版本bignum的用戶下載到惡意的二進(jìn)制文件。獲取S3 Bucket與Path并不困難,可以很簡單的從包管理文件中獲取。如下圖:

并且,從上文Virustotal的檢出結(jié)果可以看出,對于此次的造成信息泄露的惡意文件62家殺毒軟件只有一家能檢出,該原因可能在于惡意軟件并沒有對敏感文件的信息進(jìn)行竊取。但是如若惡意文件具有更完備的功能以及免殺手段,那么用戶對于開源包的信任也可能導(dǎo)致攻擊行為的落地。
此外,Bucket可被劫持不僅是bignum包存在的問題,整個(gè)開源生態(tài)系統(tǒng)中存在著許多會受到這種攻擊的軟件包和存儲庫。它們所使用的廢棄的S3 Bucket,如果被攻擊者利用也可能造成較大危害。
因此,廢棄的資產(chǎn)不僅僅是一個(gè)被遺忘工具,其若被攻擊者接管,也會成為信息竊取和入侵的有力武器。這提醒了組件提供方,除了最新版本的組件安全外,也應(yīng)注意以往舊版本的組件所使用資產(chǎn)可能存在的風(fēng)險(xiǎn),因?yàn)橄到y(tǒng)版本較低或是依賴版本較低會使用戶安裝舊版本的組件,這樣如若舊版本組件所使用資產(chǎn)被攻擊者劫持,那么就會導(dǎo)致攻擊行為的產(chǎn)生。同時(shí),用戶也應(yīng)注意自己所使用的第三方組件的安全性,以確保它們沒有潛在的漏洞或惡意代碼。
洞源實(shí)驗(yàn)室
安全工程師:hu1y40
2023 年 6 月?21?日
