最新消息
北京时间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 服务端或代理服务器。• 如果服务部署在反向代理(如 Nginx、Apache)之后,也可能受此漏洞影响,需同步检查代理配置。
什么是 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.强制 CRLF 检测
• 分块大小行必须以
\r\n结尾,否则直接报错"chunked line ends with bare LF"。
2.禁止非法 CR 字符
• 如果分块行内部出现额外的
\r,抛出错误"invalid CR in chunked line",防止攻击者构造畸形数据。
3.严格遵循 RFC 9112 标准
• 确保所有分块请求解析符合 HTTP 规范,避免解析歧义。
修复代码关键逻辑(简化版):
if bytes.IndexByte(p, '\r') != len(p)-2 { return errors.New("invalid chunked line") } p = p[:len(p)-2] // 移除 CRLF,仅处理合法数据 影响与建议✅必须升级的场景:
• 你的 Go 服务直接暴露在公网,处理用户请求。
• 使用了
net/http作为 HTTP 服务器或客户端,并启用分块传输编码。
如何检查是否受影响?
• 运行
go version,如果版本低于1.24.2或1.23.8,需立即升级。• 使用安全扫描工具(如 Burp Suite)测试服务端是否允许裸 LF 分块请求。
升级命令
go get golang.org/dl/go1.24.2 go1.24.2 download 总结Go 1.24.2 是一个关键安全更新,所有开发者应尽快升级,避免被恶意攻击者利用请求走私漏洞入侵服务。如果你的业务依赖 HTTP 分块传输编码,建议:
1.立即升级到 Go 1.24.2。
2.检查反向代理配置,确保兼容 RFC 标准。
3.监控异常请求,防范潜在攻击。
我们相信 Go 语言和算法为普通开发者提供了强有力的“面试利器”,并致力于分享全面的编程知识。在这里,您可以找到最新的 Go 语言教程、算法解析、提升面试竞争力的秘籍以及行业动态。 欢迎关注“福大大架构师每日一题”,让 Go 语言和算法助力您的职业发展
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.