go 1.24.2 发布:net/http 重大安全漏洞修复,你的服务还安全吗?

go 1.24.2 发布:net/http 重大安全漏洞修复,你的服务还安全吗?

精选文章moguli202025-04-23 14:47:2713A+A-



最新消息
北京时间 2025年4月2日,Go 官方团队紧急发布了 Go 1.24.2Go 1.23.8 版本,重点修复了 net/http 包中的一个高危安全漏洞——HTTP 请求走私(Request Smuggling)(CVE-2025-22871)。该漏洞可能导致恶意攻击者绕过安全检测,构造非法请求,威胁服务器安全。

漏洞影响范围

  • o 所有使用 net/http 处理分块传输编码(Chunked Transfer Encoding)的 Go 服务端或代理服务器。
  • o 如果服务部署在反向代理(如 Nginx、Apache)之后,也可能受此漏洞影响,需同步检查代理配置。

漏洞详解:HTTP 请求走私(Request Smuggling)

什么是 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 严格拒绝此类请求,直接返回错误。


修复内容:Go 1.24.2 如何堵住漏洞?

本次更新在 net/http 包中增加了严格的 分块编码校验逻辑

  1. 1. 强制 CRLF 检测
  2. o 分块大小行必须以 \r\n 结尾,否则直接报错 "chunked line ends with bare LF"
  3. 2. 禁止非法 CR 字符
  4. o 如果分块行内部出现额外的 \r,抛出错误 "invalid CR in chunked line",防止攻击者构造畸形数据。
  5. 3. 严格遵循 RFC 9112 标准
  6. o 确保所有分块请求解析符合 HTTP 规范,避免解析歧义。

修复代码关键逻辑(简化版):

if bytes.IndexByte(p, '\r') != len(p)-2 {  
    return errors.New("invalid chunked line")  
}  
p = p[:len(p)-2]  // 移除 CRLF,仅处理合法数据  

影响与建议

必须升级的场景

  • o 你的 Go 服务直接暴露在公网,处理用户请求。
  • o 使用了 net/http 作为 HTTP 服务器或客户端,并启用分块传输编码。

如何检查是否受影响?

  • o 运行 go version,如果版本低于 1.24.21.23.8,需立即升级。
  • o 使用安全扫描工具(如 Burp Suite)测试服务端是否允许裸 LF 分块请求。

升级命令

go get golang.org/dl/go1.24.2  
go1.24.2 download  

总结

Go 1.24.2 是一个关键安全更新,所有开发者应尽快升级,避免被恶意攻击者利用请求走私漏洞入侵服务。如果你的业务依赖 HTTP 分块传输编码,建议:

  1. 1. 立即升级到 Go 1.24.2
  2. 2. 检查反向代理配置,确保兼容 RFC 标准。
  3. 3. 监控异常请求,防范潜在攻击。


·



我们相信 Go 语言和算法为普通开发者提供了强有力的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的 Go 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。


欢迎关注“福大大架构师每日一题”,让 Go 语言和算法助力您的职业发展

·

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2