Next.js 受 9.1 級(jí)重大漏洞攻擊...
上周五,就在你剛犯了“周五上線代碼”的經(jīng)典錯(cuò)誤后不久,全球最受歡迎的JavaScript框架Next.js被曝出了一項(xiàng)高達(dá)9.1級(jí)的嚴(yán)重安全漏洞。
此次漏洞攻擊方式極為簡(jiǎn)單:攻擊者可以繞過(guò)Next.js中間件的認(rèn)證與授權(quán)檢查,這意味著原本用于保護(hù)應(yīng)用安全的核心邏輯完全失效。
例如,在軟件即服務(wù)(SaaS)應(yīng)用中,我們通常會(huì)在中間件中編寫類似“如果用戶未付費(fèi),則自動(dòng)跳轉(zhuǎn)至付費(fèi)頁(yè)面”的邏輯。然而,由于Next.js母公司Vercel近期在安全代碼上存在嚴(yán)重疏忽,攻擊者僅需向服務(wù)器發(fā)出特制請(qǐng)求,即可輕松跳過(guò)中間件中所有的權(quán)限校驗(yàn)。通俗來(lái)說(shuō),用戶只要“禮貌地拒絕”支付,就能免費(fèi)無(wú)限制使用你的應(yīng)用服務(wù)。
此次漏洞爆出后,長(zhǎng)期批評(píng)Next.js與React框架的用戶可謂揚(yáng)眉吐氣,紛紛高喊“早就提醒過(guò)你們了!”,而這群“技術(shù)預(yù)言家”們大多還是躲在暗地里觀看熱鬧。
與此同時(shí),一些競(jìng)爭(zhēng)對(duì)手(比如Cloudflare)也迅速借機(jī)搶奪Vercel客戶,甚至在推特上演了一場(chǎng)公開(kāi)的科技界“嘴炮大戰(zhàn)”。
誰(shuí)真正需要擔(dān)心這個(gè)漏洞?
- 如果你的Next.js應(yīng)用仍在使用舊版本,并且依賴中間件進(jìn)行權(quán)限認(rèn)證,請(qǐng)立刻升級(jí)補(bǔ)丁版本,否則風(fēng)險(xiǎn)極高。
- 如果你未使用Next.js的Middleware功能,或者沒(méi)有部署在Vercel、Netlify等平臺(tái),則無(wú)需過(guò)度擔(dān)憂。
- 若你正在自建服務(wù)器環(huán)境且使用Vercel中間件,可能就在你閱讀本文期間,應(yīng)用已經(jīng)被黑客攻擊成功。
攻擊原理大揭秘:Next.js中間件為何如此脆弱?
幾乎每個(gè)Web框架都有中間件(Middleware)的概念,其本質(zhì)是位于HTTP請(qǐng)求與響應(yīng)之間的一層處理代碼,用來(lái)實(shí)現(xiàn)諸如日志記錄、錯(cuò)誤處理、權(quán)限校驗(yàn)等通用功能。如此一來(lái),我們就不必在每個(gè)頁(yè)面或API路由中重復(fù)編寫類似的代碼。
但問(wèn)題出在:安全研究人員近日翻閱Next.js的歷史代碼時(shí),意外發(fā)現(xiàn)了一個(gè)名為middleware-sub-request的特殊HTTP頭部字段。只要攻擊者明確知道中間件的具體名稱(通常很容易猜測(cè),因?yàn)殚_(kāi)發(fā)者命名習(xí)慣普遍規(guī)律),便能利用這個(gè)頭部字段強(qiáng)行繞過(guò)中間件執(zhí)行。
這一漏洞的致命之處在于:實(shí)施攻擊的難度極低,但對(duì)網(wǎng)站造成的破壞卻可能巨大。
此外,此次安全事件還意外引發(fā)了額外的“副作用”:例如Cloudflare曾嘗試緊急發(fā)布規(guī)則自動(dòng)屏蔽此HTTP頭,但卻導(dǎo)致了諸如Supabase等第三方認(rèn)證服務(wù)的大量誤報(bào),迫使他們將規(guī)則改為用戶手動(dòng)開(kāi)啟。
漏洞修復(fù)緩慢引發(fā)爭(zhēng)議,安全響應(yīng)速度遭質(zhì)疑
事實(shí)上,社區(qū)開(kāi)發(fā)者最為不滿的并非漏洞本身,而是Next.js官方修復(fù)漏洞所花費(fèi)的漫長(zhǎng)時(shí)間。
該漏洞最初在2月27日即被安全人員報(bào)告給了Next.js團(tuán)隊(duì),但Vercel遲至3月18日才正式發(fā)布安全補(bǔ)丁,整整拖延了近三周時(shí)間。對(duì)如此嚴(yán)重的安全問(wèn)題而言,修復(fù)時(shí)間實(shí)在過(guò)于漫長(zhǎng),令廣大開(kāi)發(fā)者難以接受。
科技巨頭“互撕”大戰(zhàn),Cloudflare公開(kāi)“搶客戶”
更為滑稽的是:Cloudflare的CEO借此事件順勢(shì)推出新工具,號(hào)稱能一鍵將部署于Vercel的Next.js應(yīng)用遷移到Cloudflare平臺(tái),并暗諷Vercel根本“不關(guān)心客戶安全”。
面對(duì)Cloudflare的挑釁,Vercel的CEO毫不示弱,立即反擊稱Cloudflare才是臭名昭著的“Cloudbleed”安全事件罪魁禍?zhǔn)?,并吐槽Cloudflare的DDoS防護(hù)服務(wù)形同虛設(shè)。
雙方CEO你來(lái)我往,推特上的互動(dòng)一度演變?yōu)橐粓?chǎng)科技圈的“迷因大戰(zhàn)”,場(chǎng)面極為尷尬。
作為同時(shí)使用過(guò)Vercel和Cloudflare服務(wù)的用戶,我真心希望科技大佬們少一些無(wú)聊的爭(zhēng)吵,多一些建設(shè)性的行動(dòng)。
總結(jié)與行動(dòng)建議:
- 立即升級(jí)你正在使用的Next.js版本,避免因舊版漏洞遭到入侵。
- 密切關(guān)注Next.js與Vercel官方安全公告,保證你的生產(chǎn)環(huán)境隨時(shí)安全可靠。
希望本次事件能夠提高業(yè)界對(duì)安全問(wèn)題的重視,畢竟在互聯(lián)網(wǎng)世界里,沒(méi)有什么比應(yīng)用安全更為重要。