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团队响应迅速,将其定性为安全问题进行修复,体现了对生态系统安全性的高度重视。

相关推荐
Ophelia(秃头版4 小时前
经典设计模式:单例模式、工厂模式
java·开发语言·单例模式
Chan164 小时前
消息推送的三种常见方式:轮询、SSE、WebSocket
java·网络·websocket·网络协议·http·sse
Dear.爬虫5 小时前
Golang中逃逸现象, 变量“何时栈?何时堆?”
开发语言·后端·golang
参.商.5 小时前
【Day21】146.LRU缓存 (Least Recently Used)
leetcode·缓存·golang
编码浪子5 小时前
趣味学RUST基础篇(构建一个命令行程序2重构)
开发语言·重构·rust
echoarts6 小时前
MATLAB R2025a安装配置及使用教程(超详细保姆级教程)
开发语言·其他·matlab
阿方.9186 小时前
《数据结构全解析:栈(数组实现)》
java·开发语言·数据结构
Dovis(誓平步青云)7 小时前
《探索C++11:现代语法的内存管理优化“性能指针”(下篇)》
开发语言·jvm·c++
charlie1145141917 小时前
前端三件套简单学习:HTML篇1
开发语言·前端·学习·html