愛伊米

Node.js 易受新型 HTTP 請求夾帶技術攻擊

出品|開源中國

作者|局長

PortSwigger 網站近日報道了 Node。js 存在兩個 HTTP 請求夾帶(HTTP request smuggling,簡稱 HRS)攻擊漏洞,並指出其中一個漏洞似乎使用了新的 HRS 技術。

HTTP 請求夾帶技術是由一個或多個使用者同時對目標網站伺服器發起大量請求,透過構造特殊結構請求,干擾網站伺服器對請求的處理(主要是干擾 HTTP 請求序列),從而實現攻擊目標。

Node.js 易受新型 HTTP 請求夾帶技術攻擊

據介紹,這些漏洞由 Mattias Grenfeldt 和 Asta Olofsson 在瑞典 KTH 皇家理工學院計算機科學學士學位論文研究中發現。Grenfeldt 稱,剛開始他們在六個開源 Web 伺服器和六個開源代理中尋找 HTTP 請求夾帶漏洞。Node。js 就是其中被調查的專案之一,但他們當時沒有發現任何問題。經過一段時間後,在報告專案中發現的其他問題時,他們偶然發現了 Node。js 的這兩個漏洞。

漏洞之一 CVE-2021-22959 使用了常見的 HRS 技術,它透過利用 HTTP 請求中 header 允許存在空格的特性,從而進行 HTTP 請求夾帶攻擊。因為 HTTP 解析器接受在 header 名稱之後和冒號之前帶有空格的請求。

Grenfeldt 解釋道,這種 HRS 技術十分常見,在這種情況下,Node。js 會將 ‘Content-Length : 5’ 解釋為 ‘Content-Length: 5’,如果與忽略此類 header 且未經修改地轉發它們的代理結合使用,則有可能會被用於 HRS 攻擊。

而另一個漏洞 CVE-2021-22960 似乎使用了新的 HRS 技術,其透過結合代理中的錯誤行終止和 Node。js 中塊擴充套件的錯誤解析,從而進行 HTTP 請求夾帶攻擊。

Grenfeldt 和 Olofsson 發現易受攻擊的代理往往會查詢單個換行符 (LF) 來終止包含塊大小的行,但沒有像往常一樣檢查 LF 之前是否有回車。

“就在此行終止之前是很少使用的塊擴充套件功能的地方。在塊擴充套件中,開發者可以在塊大小之後指定額外的引數,例如‘a=b’。然而,很少在系統中實現對此的解析,而許多情況會允許該區域中的任何位元組“,Grenfeldt 繼續解釋道。

最後,Grenfeldt 和 Olofsson 於 6 月 19 日至 20 日反饋了這些問題,Node。js 於 10 月 12 日釋出了修復程式。