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