📢 最新消息
北京时间 2025年4月2日,Go 官方团队紧急发布了 Go 1.24.2 和 Go 1.23.8 版本,重点修复了 net/http
包中的一个高危安全漏洞——HTTP 请求走私(Request Smuggling)(CVE-2025-22871)。该漏洞可能导致恶意攻击者绕过安全检测,构造非法请求,威胁服务器安全。
🚨 漏洞影响范围
net/http
处理分块传输编码(Chunked Transfer Encoding)的 Go 服务端或代理服务器。什么是 HTTP 请求走私? HTTP 请求走私是一种攻击技术,攻击者通过构造畸形的 HTTP 请求,利用服务器和代理对请求解析的差异,绕过安全策略,实现恶意请求注入、缓存投毒甚至数据窃取。
漏洞成因
在 Go 的 net/http
包中,当处理 分块传输编码(Chunked Encoding) 的请求时,如果 分块大小行(Chunk-Size Line)以 \n
(LF)而非标准的 \r\n
(CRLF)结尾,某些代理或服务端可能会错误解析,导致请求走私。
攻击示例 恶意请求可能长这样:
GET / HTTP/1.1
Transfer-Encoding: chunked
5\n // 非法分块行(仅 LF 结尾)
Hello
0\r\n\r
修复前:部分服务器可能错误解析 5\n
为合法分块,导致后续数据被恶意利用。
修复后:Go 1.24.2 严格拒绝此类请求,直接返回错误。
本次更新在 net/http
包中增加了严格的 分块编码校验逻辑:
\r\n
结尾,否则直接报错 "chunked line ends with bare LF"。\r
,抛出错误 "invalid CR in chunked line",防止攻击者构造畸形数据。修复代码关键逻辑(简化版):
if bytes.IndexByte(p, '\r') != len(p)-2 {
return errors.New("invalid chunked line")
}
p = p[:len(p)-2] // 移除 CRLF,仅处理合法数据
✅ 必须升级的场景:
net/http
作为 HTTP 服务器或客户端,并启用分块传输编码。🔍 如何检查是否受影响?
go version
,如果版本低于 1.24.2 或 1.23.8,需立即升级。📌 升级命令
go get golang.org/dl/go1.24.2
go1.24.2 download
Go 1.24.2 是一个关键安全更新,所有开发者应尽快升级,避免被恶意攻击者利用请求走私漏洞入侵服务。如果你的业务依赖 HTTP 分块传输编码,建议:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有