27萬個專案使用的npm套件netmask遭爆含有重大漏洞

安全漏洞CVE-2021-28918讓任何人都可以在netmask中,提交一個看起來像是私人IP的位址,但它實際上卻連至公共IP,這讓攻擊者得以散布惡意檔案

圖片來源: 

sickcodes

一群安全研究人員於上周揭露,熱門的npm套件netmask含有一個重大的安全漏洞CVE-2021-28918,可能衍生出伺服器端請求偽造(Server-Side Request Forgery,SSRF),或引入外部惡意檔案(Remote File Inclusion,RFI)等的攻擊手法,而且全球有超過27萬個專案採用了netmask。

Npm為Node.js套件管理工具,而netmask則可用來解析與理解IPv4無類別域間路由(Classless Inter-Domain Routing,CIDR)區塊,以讓它們能被利用或比較,例如它可在使用者輸入特定IP時,判斷它是否位於使用者所定義的區塊中,或者是列出所有包含在某一區塊中的IP。

CVE-2021-28918漏洞出現在netmask的private-ip功能中,這個漏洞很簡單,它只是把應該視為8位元的IP位址第一節視為字串,當作是10位元,例如於private-ip中輸入0127.0.0.1時,它指的應該是87.0.0.1,但netmask卻自動忽略了前面的0,將它視為127.0.0.1,此一漏洞從netmask自9年前現身以來,便存在迄今。

研究人員指出,該漏洞看起來不起眼,卻會造成巨大災難。如果瀏覽器能夠辨識8進位文字,但Node.js應用程式不行,代表使用者可提交任何看起來像是來自內部的網址,但事實上所存取的卻是遠端的惡意檔案,或者是使用者提交了看起來是公開的網址,但其實是私人網域,並因而衍生出SSRF或RFI攻擊。

舉例來說,使用者在netmask中提交了012,該套件以為它屬於12這類公共IP位址,但它其實是10,屬於私用IP位址;或者使用者提交了010,netmask把它視為10(私用IP位址),但它卻是8(公共IP位址)。

研究人員警告,任何人都可以在netmask中提交一個看似是私人IP位址,實際上卻連至公共IP位址而下載惡意檔案。

迄今netmask的全球下載數量已超過312萬次,在GitHub上有27.8萬個專案採用netmask,相關專案是否受到CVE-2021-28918漏洞波及端看其應用方式,目前該漏洞已被修補,研究人員呼籲所有netmask用戶都應儘速更新。

資料來源:iThome

Scroll Up