
Go语言团队于2025年9月4日发布了两个紧急补丁版本:Go 1.25.1 和Go 1.24.7 。这两个版本主要包含一个重要的安全修复,涉及net/http
包中的CrossOriginProtection
(跨域保护)组件,该漏洞被标识为CVE-2025-47910。本文将详细介绍该漏洞的背景、影响、修复方式,以及开发者应如何应对。
1. 漏洞概述:CVE-2025-47910
1.1 问题背景
CrossOriginProtection
是Go 1.25中引入的一个新组件,用于增强网络应用的安全性,防止跨站请求伪造(CSRF)和其他跨域攻击。它通过检查请求的来源(Origin)和目标站点是否匹配来工作。开发者可以使用AddInsecureBypassPattern
方法配置某些路径模式,允许这些路径跳过跨域保护检查,通常用于内部可信路径或特殊业务场景。
1.2 漏洞详情
漏洞的核心在于:当向CrossOriginProtection.AddInsecureBypassPattern
传递模式时,本应重定向到这些模式的请求(例如缺少末尾斜杠的请求)也会被豁免,这可能不符合预期。例如:
- 如果开发者配置了绕过模式
/hello/
(期望仅允许路径为/hello/
的请求绕过检查),则路径为/hello
(缺少末尾斜杠)的请求也会被错误地豁免。 - 这种行为扩大了安全绕过范围,可能导致本应受到保护的路径意外暴露,从而增加跨域攻击的风险。
1.3 技术原因
该问题源于CrossOriginProtection
内部使用ServeMux
来检查绕过模式。ServeMux
在处理请求时,如果注册了路径/hello/
,则对/hello
的请求会触发内部重定向(返回HTTP 302重定向到/hello/
)。CrossOriginProtection
在检查时,会错误地将这种"将被重定向"的请求也视为匹配绕过模式,从而豁免其跨域检查。然而,实际转发给下游处理程序的仍是原始请求路径(如/hello
),如果该路径有定义处理器,请求就会被处理而不受保护。
2. 漏洞的影响与风险
2.1 安全风险
- 跨域请求伪造(CSRF):攻击者可能利用此漏洞,绕过跨域保护,向本应受保护的端点发送恶意请求。
- 数据泄露或未授权操作:如果绕过模式配置在涉及敏感操作或数据的路径上,漏洞可能导致数据泄露或未授权操作。
2.2 受影响版本
- Go 1.25.0 :该版本引入了
CrossOriginProtection
功能,因此受影响。 - Go 1.24.x及更早版本 :这些版本未包含
CrossOriginProtection
组件,因此不受此漏洞影响。Go 1.24.7的发布主要是为了保持版本分支的维护一致性。
2.3 实际利用场景
假设一个API端点/api/transfer/
用于处理资金转账操作,并配置为绕过跨域保护(可能由于历史原因或内部调用)。利用此漏洞,攻击者可能通过向/api/transfer
(无末尾斜杠)发送恶意请求来绕过保护,执行未授权的转账操作。
3. 修复方案
3.1 修复内容
Go团队在Go 1.25.1 中修复了此问题。修复方式改为:要求绕过模式必须与请求路径完全匹配,不再考虑内部重定向逻辑。这意味着:
- 只有请求路径与配置的绕过模式完全一致时,才会跳过跨域保护。
- 在上面的例子中,仅配置
/hello/
会豁免对/hello/
的请求,而不会豁免对/hello
的请求。
3.2 修复版本
- 用户应升级到Go 1.25.1 或Go 1.24.7(后者虽不受影响,但建议使用最新补丁)。
- 下载地址:https://go.dev/dl/
3.3 应对建议
- 立即升级:所有使用Go 1.25.0的项目应尽快升级到Go 1.25.1。
- 检查配置 :如果项目中使用了
CrossOriginProtection
和AddInsecureBypassPattern
,升级后应重新评估绕过模式的配置,确保其符合安全预期。 - 代码审查:审查网络层代码,确认是否有敏感端点依赖此绕过机制,并进行必要的安全测试。
4. Go 1.25.1的其他改进
除了安全修复,Go 1.25.1还包含一些自Go 1.25发布以来发现的小错误修复和稳定性改进。虽然这些改动较为轻微,但建议用户升级以获得最稳定的开发体验。
5. 如何升级
升级到Go 1.25.1非常简单:
- 二进制安装:访问 https://go.dev/dl/ ,选择适合您操作系统的二进制包。
- 源码编译:如果您从源码构建Go,使用Git克隆仓库后,执行以下命令:
bash
git checkout go1.25.1
然后按照正常流程构建。
- 模块依赖 :确保您的
go.mod
文件中Go版本指令已更新为go 1.25.1
,这有助于确保构建环境的一致性。
6. 总结
Go 1.25.1是一个重要的点版本发布,主要修复了net/http
包中跨域保护组件的安全漏洞(CVE-2025-47910)。该漏洞可能导致跨域保护被意外绕过,增加应用的安全风险。Go团队响应迅速,将其定性为安全问题进行修复,体现了对生态系统安全性的高度重视。