go 1.25.1发布:重点修复net/http跨域保护安全漏洞(CVE-2025-47910)

Go语言团队于2025年9月4日发布了两个紧急补丁版本:Go 1.25.1Go 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.1Go 1.24.7(后者虽不受影响,但建议使用最新补丁)。
  • 下载地址:https://go.dev/dl/

3.3 应对建议

  1. 立即升级:所有使用Go 1.25.0的项目应尽快升级到Go 1.25.1。
  2. 检查配置 :如果项目中使用了CrossOriginProtectionAddInsecureBypassPattern,升级后应重新评估绕过模式的配置,确保其符合安全预期。
  3. 代码审查:审查网络层代码,确认是否有敏感端点依赖此绕过机制,并进行必要的安全测试。

4. Go 1.25.1的其他改进

除了安全修复,Go 1.25.1还包含一些自Go 1.25发布以来发现的小错误修复和稳定性改进。虽然这些改动较为轻微,但建议用户升级以获得最稳定的开发体验。

5. 如何升级

升级到Go 1.25.1非常简单:

  1. 二进制安装:访问 https://go.dev/dl/ ,选择适合您操作系统的二进制包。
  2. 源码编译:如果您从源码构建Go,使用Git克隆仓库后,执行以下命令:
bash 复制代码
    git checkout go1.25.1

然后按照正常流程构建。

  1. 模块依赖 :确保您的go.mod文件中Go版本指令已更新为go 1.25.1,这有助于确保构建环境的一致性。

6. 总结

Go 1.25.1是一个重要的点版本发布,主要修复了net/http包中跨域保护组件的安全漏洞(CVE-2025-47910)。该漏洞可能导致跨域保护被意外绕过,增加应用的安全风险。Go团队响应迅速,将其定性为安全问题进行修复,体现了对生态系统安全性的高度重视。

相关推荐
0110_102410 小时前
tauri + rust的环境搭建---初始化以及构建
开发语言·后端·rust
会开花的二叉树10 小时前
C++微服务 UserServer 设计与实现
开发语言·c++·微服务
像风一样自由202010 小时前
Rust Tokio vs Go net/http:云原生与嵌入式生态选型指南
开发语言·golang·rust
DuHz10 小时前
C程序中的数组与指针共生关系
linux·c语言·开发语言·嵌入式硬件·算法
我星期八休息10 小时前
C++智能指针全面解析:原理、使用场景与最佳实践
java·大数据·开发语言·jvm·c++·人工智能·python
大猫会长10 小时前
docker安装php+apache
java·开发语言
道之极万物灭10 小时前
Go小工具合集
开发语言·后端·golang
梵得儿SHI11 小时前
Java 反射机制深度剖析:性能与安全性的那些坑
java·开发语言·安全·反射·动态代理·性能·反射机制
fsnine11 小时前
Python图形化界面——pyqt5教程
开发语言·python·qt
嵌入式-老费11 小时前
Easyx图形库应用(和lua结合使用)
开发语言·lua