打開網(wǎng)易新聞 查看精彩圖片
打開網(wǎng)易新聞 查看精彩圖片

最新消息
北京時(shí)間2025年4月2日,Go 官方團(tuán)隊(duì)緊急發(fā)布了Go 1.24.2Go 1.23.8版本,重點(diǎn)修復(fù)了net/http包中的一個(gè)高危安全漏洞——HTTP 請(qǐng)求走私(Request Smuggling)(CVE-2025-22871)。該漏洞可能導(dǎo)致惡意攻擊者繞過安全檢測(cè),構(gòu)造非法請(qǐng)求,威脅服務(wù)器安全。

漏洞影響范圍

  • ? 所有使用net/http處理分塊傳輸編碼(Chunked Transfer Encoding)的 Go 服務(wù)端或代理服務(wù)器。

  • ? 如果服務(wù)部署在反向代理(如 Nginx、Apache)之后,也可能受此漏洞影響,需同步檢查代理配置。

漏洞詳解:HTTP 請(qǐng)求走私(Request Smuggling)

什么是 HTTP 請(qǐng)求走私?
HTTP 請(qǐng)求走私是一種攻擊技術(shù),攻擊者通過構(gòu)造畸形的 HTTP 請(qǐng)求,利用服務(wù)器和代理對(duì)請(qǐng)求解析的差異,繞過安全策略,實(shí)現(xiàn)惡意請(qǐng)求注入、緩存投毒甚至數(shù)據(jù)竊取。

漏洞成因
在 Go 的net/http包中,當(dāng)處理分塊傳輸編碼(Chunked Encoding)的請(qǐng)求時(shí),如果分塊大小行(Chunk-Size Line)以\n(LF)而非標(biāo)準(zhǔn)的\r\n(CRLF)結(jié)尾,某些代理或服務(wù)端可能會(huì)錯(cuò)誤解析,導(dǎo)致請(qǐng)求走私。

攻擊示例
惡意請(qǐng)求可能長(zhǎng)這樣:

GET / HTTP/1.1   Transfer-Encoding: chunked   5\n     // 非法分塊行(僅 LF 結(jié)尾)   Hello   0\r\n\r  

修復(fù)前:部分服務(wù)器可能錯(cuò)誤解析5\n為合法分塊,導(dǎo)致后續(xù)數(shù)據(jù)被惡意利用。
修復(fù)后:Go 1.24.2 嚴(yán)格拒絕此類請(qǐng)求,直接返回錯(cuò)誤。

? 修復(fù)內(nèi)容:Go 1.24.2 如何堵住漏洞?

本次更新在net/http包中增加了嚴(yán)格的分塊編碼校驗(yàn)邏輯

  1. 1.強(qiáng)制 CRLF 檢測(cè)

  • ? 分塊大小行必須以\r\n結(jié)尾,否則直接報(bào)錯(cuò)"chunked line ends with bare LF"。

2.禁止非法 CR 字符

  • ? 如果分塊行內(nèi)部出現(xiàn)額外的\r,拋出錯(cuò)誤"invalid CR in chunked line",防止攻擊者構(gòu)造畸形數(shù)據(jù)。

3.嚴(yán)格遵循 RFC 9112 標(biāo)準(zhǔn)

  • ? 確保所有分塊請(qǐng)求解析符合 HTTP 規(guī)范,避免解析歧義。

修復(fù)代碼關(guān)鍵邏輯(簡(jiǎn)化版):

if bytes.IndexByte(p, '\r') != len(p)-2 {       return errors.New("invalid chunked line")   }   p = p[:len(p)-2]  // 移除 CRLF,僅處理合法數(shù)據(jù)  
影響與建議

?必須升級(jí)的場(chǎng)景

  • ? 你的 Go 服務(wù)直接暴露在公網(wǎng),處理用戶請(qǐng)求。

  • ? 使用了net/http作為 HTTP 服務(wù)器或客戶端,并啟用分塊傳輸編碼。

如何檢查是否受影響?

  • ? 運(yùn)行go version,如果版本低于1.24.21.23.8,需立即升級(jí)。

  • ? 使用安全掃描工具(如 Burp Suite)測(cè)試服務(wù)端是否允許裸 LF 分塊請(qǐng)求。

升級(jí)命令

go get golang.org/dl/go1.24.2   go1.24.2 download  
總結(jié)

Go 1.24.2 是一個(gè)關(guān)鍵安全更新,所有開發(fā)者應(yīng)盡快升級(jí),避免被惡意攻擊者利用請(qǐng)求走私漏洞入侵服務(wù)。如果你的業(yè)務(wù)依賴 HTTP 分塊傳輸編碼,建議:

  1. 1.立即升級(jí)到 Go 1.24.2。

  2. 2.檢查反向代理配置,確保兼容 RFC 標(biāo)準(zhǔn)。

  3. 3.監(jiān)控異常請(qǐng)求,防范潛在攻擊。

我們相信 Go 語言和算法為普通開發(fā)者提供了強(qiáng)有力的“面試?yán)鳌?,并致力于分享全面的編程知識(shí)。在這里,您可以找到最新的 Go 語言教程、算法解析、提升面試競(jìng)爭(zhēng)力的秘籍以及行業(yè)動(dòng)態(tài)。 歡迎關(guān)注“福大大架構(gòu)師每日一題”,讓 Go 語言和算法助力您的職業(yè)發(fā)展