JavaScript Web應(yīng)用程序和Web服務(wù)器容易受到稱為正則表達(dá)式(regex)拒絕服務(wù)(ReDoS)的特定類型的漏洞/攻擊。當(dāng)攻擊者將大量復(fù)雜的文本發(fā)送到基于JavaScript的Web服務(wù)器或應(yīng)用程序的開放輸入時,就會發(fā)生這些漏洞。
近340個站點(diǎn)??易受ReDoS攻擊
研究人員說這些缺陷的主要原因是缺乏對正則表達(dá)式匹配性能的關(guān)注,因為大多數(shù)開發(fā)人員似乎都專注于準(zhǔn)確性,在代碼中留下了大量漏洞,攻擊者可以使用ReDoS攻擊來利用這些漏洞。
研究人員設(shè)計了一種在實際網(wǎng)站上檢測這些漏洞而無需實際使用ReDoS漏洞利用代碼的方法。他們使用這種方法掃描2,846個流行的基于Node.js的站點(diǎn),顯示339個大約12%的站點(diǎn)容易受到至少一個ReDoS漏洞的攻擊。
研究小組表示,
“ReDoS對這些網(wǎng)站的可用性構(gòu)成嚴(yán)重威脅,我們的結(jié)果是開發(fā)用于檢測和緩解JavaScript中ReDoS漏洞的技術(shù)的號召。”
ReDoS攻擊在JavaScript下被放大
如果服務(wù)器組件或應(yīng)用程序庫不是專門設(shè)計用于處理各種邊緣情況,則攻擊者的輸入最終會一次消耗整個應(yīng)用程序或服務(wù)器幾秒鐘或幾分鐘,而服務(wù)器會分析并模式匹配輸入。
各種編程語言和Web服務(wù)器技術(shù)在模式匹配操作和ReDoS攻擊的性能方面也存在類似問題,但由于大多數(shù)JavaScript服務(wù)器的單線程執(zhí)行模型,每個請求都由處理,因此它們在JavaScript的情況下被夸大了。同一個線程。
當(dāng)ReDoS攻擊命中時,最終會阻塞整個服務(wù)器,而不是減慢一個特定的操作。
自2012年以來已知ReDoS攻擊,但勢頭正在增強(qiáng)
在JavaScript服務(wù)器的情況下,ReDoS攻擊首先在2012年發(fā)表的一篇研究論文中詳細(xì)介紹,但當(dāng)時,JavaScript和Node.js,尤其不是他們今天在Web開發(fā)領(lǐng)域的龐然大物,因此,在過去的五年里,特別的問題基本上被忽略了。
2017年發(fā)布的后續(xù)研究顯示,Node.js庫和應(yīng)用程序中發(fā)現(xiàn)的漏洞總數(shù)中有5%是ReDoS漏洞。
但根據(jù)上周在一次安全會議上提出的研究,ReDoS問題在JavaScript社區(qū)中正在獲得動力,因為多年來一直未得到解決。
來自德國達(dá)姆施塔特技術(shù)大學(xué)的兩名學(xué)者Cristian-Alexandru Staicu和Michael Pradel表示,他們在流行的Node.js模塊中發(fā)現(xiàn)了25個以前未知的漏洞。
兩人表示,攻擊者可以使用這25個庫中的任何一個來制作特殊的漏洞攻擊包并攻擊網(wǎng)站/服務(wù)器。
發(fā)送漏洞利用程序包導(dǎo)致任何易受攻擊的網(wǎng)站在幾秒到幾分鐘之間凍結(jié),因為服務(wù)器試圖將漏洞利用中包含的文本與正則表達(dá)式(正則表達(dá)式)模式匹配,以便決定如何處理輸入。輸入字段上的此類正則表達(dá)式過濾器很常見,因為它們是許多XSS過濾器的基礎(chǔ)。
但是,雖然一次攻擊很糟糕,但將重復(fù)的漏洞利用程序包發(fā)送到同一服務(wù)器可能會導(dǎo)致停機(jī)時間延長
針對一些ReDoS問題已發(fā)布POC
達(dá)姆施塔特工業(yè)大學(xué)的研究團(tuán)隊報告了各個模塊開發(fā)人員的所有漏洞,其中一些人解決了這些問題。此GitHub存儲庫包含用于測試易受攻擊庫的概念驗證漏洞,但也鏈接到受影響模塊的相應(yīng)修復(fù)程序。
除了JavaScript之外,Java還受到ReDoS攻擊的影響。2017年,德克薩斯大學(xué)奧斯汀分校的研究人員創(chuàng)建了一個名為Rexploiter的工具,他們用它來查找從GitHub收集的150個Java程序中的41個ReDoS漏洞。
原文鏈接:https://www.bleepingcomputer.com/news/security/javascript-web-apps-and-servers-vulnerable-to-redos-attacks/