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 漏洞的技術。”
來源:開源中國