Npm Netmask SSRF繞過漏洞(CVE-2021-28918)
發布時間 2021-03-290x00 漏洞概述
CVE ID | CVE-2021-28918 | 時 間 | 2021-03-29 |
類 型 | 等 級 | 高危 | |
遠程利用 | 是 | 影響范圍 | Netmask <= v1.1.0 |
PoC/EXP | 已公開 | 在野利用 |
0x01 漏洞詳情
Netmask是npm庫中的一個軟件包,它被成千上萬的應用程序用來解析或比較IPv4地址和CIDR塊。該軟件包的每周下載量超過300萬次,截至目前,netmask已經累計有超過2.38億的總下載量。此外,大約有278,000個GitHub存儲庫依賴netmask。
2021年03月28日,netmask被披露存在一個可導致SSRF或RFI的安全漏洞(CVE-2021-28918)。在解析IP地址時帶有前導零的情況下,由于未正確進行驗證,網絡掩碼將會解析為不同的IP。該漏洞將導致成千上萬的項目容易受到SSRF繞過的攻擊,目前該漏洞的PoC已在GitHub上公開。
IP地址可以用多種格式表示,包括十六進制和整數,但最常見的IPv4地址以十進制格式表示。比如,IPv4地址以十進制格式表示為104.20.59.209,但是八進制格式表示為0150.0024.0073.0321。
在Chrome瀏覽器的地址欄中輸入0127.0.0.1/,瀏覽器會將其視為八進制格式的IP。實際上,當按下Enter或Return鍵后,IP會更改為十進制等效值87.0.0.1。這是因為大多數網絡瀏覽器(如Chrome),會自動補償混合格式的IP。這就是大多數應用程序處理此類模棱兩可的IP地址的方式。
需要注意的是,127.0.0.1并非公共IP地址,而是一個環回地址,但是,通過模棱兩可的表示將其更改為公共IP地址,從而導致解析為另一臺主機。
但是,對于npm netmask,任何前導零都會被簡單地剝離和丟棄。根據IETF的原始規范,IPv4地址的部分如果前綴為 0,可以被解析為八進制。但是netmask忽略了這一點,它始終將IP視為十進制,這意味著在您嘗試驗證IP屬于某個范圍時,使用基于八進制的IPv4地址表示將是錯誤的。
如果攻擊者能夠影響應用程序解析的IP地址,則該問題可能會導致各種漏洞,從服務器端請求偽造(SSRF)繞過到遠程文件包含(RFI)。
攻擊者在運行節點服務器來清理入站請求或查詢參數,該請求或查詢參數可能是用于進一步連接的URI,或使用較早的0前綴JavaScript表示形式,以基于八進制的部分或全部八位字節來制作IP。這可能導致SSRF,例如,通過傳遞0177.0.0.01來強制服務器連接到127.0.0.1(177是十進制127的八進制數)。一個很好的例子是,一個暴露webhooks并通過netmask檢查驗證用戶URL的系統容易受到SSRF攻擊。
而這個bug也可以被利用來進行遠程文件包含(RFI),如果攻擊者制作一個對netmask來說看起來是私有的IP地址,因為netmask將所有IPv4部分(八位數)轉換為十進制格式的方式,被其它組件評估為公共格式。
各種網絡基礎架構和安全產品(例如 Web應用防火墻)都依賴于網絡掩碼來過濾出阻止列表和允許列表中的IP。這還意味著,如果不加以檢查,則可能會導致此類缺陷,從而導致嚴重bug。
2018年,流行的軟件項目 curl中也發現具有相同類型的漏洞,它將八進制IPv4地址解析為十進制,比如,運行“ curl -v 0177.0.0.1”curl連接到177.0.0.1,而不是環回地址127.0.0.1。此前,Sick Codes、Jackson和Sahler曾在private-ip軟件包中發現了一個類似的漏洞(CVSS評分9.8),該軟件包每周有17.5萬左右的下載量。
0x02 處置建議
目前此漏洞已經修復,建議及時更新至netmask版本2.0.0。
下載鏈接:
https://www.npmjs.com/package/netmask
0x03 參考鏈接
https://www.npmjs.com/package/netmask
https://github.com/sickcodes/security/blob/master/advisories/SICK-2021-011.md
https://www.bleepingcomputer.com/news/security/critical-netmask-networking-bug-impacts-thousands-of-applications/
https://sick.codes/universal-netmask-npm-package-used-by-270000-projects-vulnerable-to-octal-input-data-server-side-request-forgery-remote-file-inclusion-local-file-inclusion-and-more-cve-2021-28918/
0x04 時間線
2021-03-28 Sick codes披露漏洞
2021-03-29 VSRC發布安全通告
0x05 附錄
CVSS評分標準官網:http://www.first.org/cvss/