少打一個字母,多個 PyPI 軟件包引入惡意依賴
根據(jù)外媒 BleepingComputer 近日的報道,多個 PyPI 軟件包被發(fā)現(xiàn)含有后門,原因是這些軟件包的某些版本存在惡意的 'request' 依賴,涉及的軟件包包括 pyanxdns、api-res-py,以及 keep。
以 keep 為例,它會使用合法的 Python 模塊 requests 來進行 HTTP 請求,但 keep v.1.2 版本中包含了一個名為 request 的模塊(注:后者缺少末尾的字母 s),雖然僅有一個字母的差異但沒有 s 的 request 被認定為惡意依賴。
受影響的各個軟件包版本及 CVE ID 如下:
- CVE-2022-30877:keep v1.2 版本受到影響
- CVE-2022-30882:pyanxdns v0.2 版本受到影響
- CVE-2022-31313:api-res-py v0.1 版受到影響
早在 5 月,就有研究人員注意到上述軟件包的部分版本包含拼寫錯誤的 request 依賴,而不是合法的 requests。雖然 pyanxdns 和 api-res-py 規(guī)模相對較小,用戶數(shù)量也不算多,但 keep 則是一個周下載量平均超過 8000 次的軟件包,如上所述其 1.2 版本使用了惡意依賴。
通過查看 keep v1.2 版本的代碼可以發(fā)現(xiàn)該版本包含惡意后門,而這個惡意后門就是 request 依賴。即使 request 被 PyPI 刪除,但還有許多鏡像網(wǎng)站沒有完全刪除這個版本的軟件包,所以不知情的用戶仍有可能會安裝這個包含惡意依賴的軟件包。
進一步查看可以發(fā)現(xiàn),代碼的第 57 行包含一個 base64 編碼的 URL,指向下面顯示的 check.so 惡意軟件。分析員還發(fā)現(xiàn)了另一個 URL(x.pyx),也與 request 依賴關系有關。
<http://dexy>[.]top/request/check.so
<http://dexy>[.]top/x.pyx
其中 check.so 傳遞了一個遠程訪問木馬(RAT),而 x.pyx 包含信息竊取惡意軟件,可以從 Chrome、Firefox、Yandex、Brave 等網(wǎng)絡瀏覽器竊取 cookies 和個人信息。
在多個 PyPI 軟件包中同時出現(xiàn)相同的惡意依賴,確實給人們提出了一個關鍵問題 —— 這是怎么發(fā)生的?
外媒 BleepingComputer 嘗試聯(lián)系了這些軟件包的作者,以了解這個問題是由單純的打錯了字產(chǎn)生的,還是維護者賬戶被劫持所導致。從 pyanxdns 作者和維護者 Marky Egeb?ck 那里得到的回復確認,這個錯誤確實是由打錯字所造成的。
Egeb?ck 表示:
很抱歉,在 setup.py 文件中出現(xiàn)了一個打字錯誤,根據(jù) git 歷史記錄顯示,這是在我添加 install_requires 的時候添加的。
此后,該開發(fā)者重新向 PyPI 上傳了一個新版本,并刪除了引用惡意 require 依賴的版本。
目前有在項目中使用 pyanxdns、api-res-py,以及 keep 的開發(fā)者還是需要查看一下目前在使用的版本是什么,避免受到漏洞的影響,盡快升級到最新版本,或使用其他軟件包進行替換。