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

一羣安全研究人員於上週揭露 ,熱門的npm套件netmask含有一個重大的安全漏洞CVE-2021-28918,可能衍生出伺服器端請求偽造(Server-Side Request Forgery,SSFR)或本地文件包含(Local 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時,它指的應該是81.0.0.1,但netmask卻自動忽略了前面的0,將它視為127.0.0.1,此一漏洞從netmask自9年前現身以來,便存在迄今。

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