JavaScript Web 應用程序和服務器易受 ReDoS 攻擊
JavaScript Web 應用程序和 Web 服務器容易受到稱為正則表達式(regex)拒絕服務(ReDoS)的特定類型的漏洞/攻擊。當攻擊者將大量復雜的文本發送到基于 JavaScript 的 Web 服務器或應用程序的開放輸入時,就會發生這些漏洞。
如果服務器組件或應用程序庫不是專門設計用于處理各種邊緣情況,則攻擊者的輸入最終會一次阻止整個應用程序或服務器幾秒鐘或幾分鐘,而服務器會分析并模式匹配輸入。
各種編程語言和 Web 服務器技術在模式匹配操作和 ReDoS 攻擊的性能方面存在類似的問題,由于大多數 JavaScript 服務器的單線程執行模型,每個請求都由同一個線程處理,因此在 JavaScript 的情況下它們被夸大了。
2017 年發布的后續研究顯示,Node.js 庫和應用程序中發現的漏洞總數中有 5% 是 ReDoS 漏洞。在上周的一次安全會議上,ReDoS 問題由于多年未得到解決,在 JavaScript 社區引起重視。來自德國達姆施塔特技術大學(Technical University in Darmstadt, Germany)的兩名學者 Cristian-Alexandru Staicu 和 Michael Pradel 表示,他們在流行的 Node.js 模塊中發現了 25 個以前未知的漏洞。
Staicu 和 Pradel 說這些漏洞的主要原因是缺乏對正則表達式匹配性能的關注,因為大多數開發人員似乎都專注于準確性,在代碼中留下了大量漏洞,攻擊者可以使用 ReDoS 攻擊來利用這些漏洞。
兩人經過進一步研究,設計出了一種在實際網站上檢測這些漏洞而無需實際使用 ReDoS 漏洞利用代碼的方法。他們使用這種方法掃描 2,846 個流行的基于 Node.js 的站點,顯示 339 個大約 12% 的站點容易受到至少一個 ReDoS 漏洞的攻擊。研究小組表示,“ReDoS 對這些網站的可用性構成嚴重威脅,我們會開發用于檢測和緩解 JavaScript 中 ReDoS 漏洞的技術。”