go库x/text缺陷报告CVE-2022-32149的处理方案

#问题描述

go库 golang.org/x/text ,注意这里不是go的源码, 在0.3.8版本之前存在一个缺陷(Vulnerability)

缺陷ID

CVE-2022-32149

具体描述

攻击者可以通过制作一个Accept-Language报头来导致拒绝服务。

具体的原因是,在解析这个Accept-Language报头时,是比较花时间的。攻击者可以针对这个,故意填充大量的Accept-Language报头内容来导致服务器的资源消耗,从而拖垮服务器。

有问题的函数是ParseAcceptLanguage。

源码分析

根据原因,源码里主要就是对长度做了一层判断。 一共4行代码改动

解决方案

在github(https://github.com/golang/go/issues/56152)上,有说解决的版本是0.4.0

这里需要明确一个概念,直接引用 和间接引用 。

如果你的代码中直接引用了这个库,可以把他升级到最新的版本。 如果是间接引用,要看一下是否是否真实使用到。

如果是真实使用到,在go build的时候go就会提示你使用go get拉去对应的text库的代码,(这个代码在modcache目录下,一般是在你home目录下),如果是使用到的话,编译环境的机器上也是可以搜到的。

间接引用,不一定就使用到了间接引用的全部代码,尽管在go源码中,通过go mod graph也可以看到里面的引用,但是对应我们的程序就是间接引用了,这里不一定真实用到。

复制代码
go mod graph | grep text

std golang.org/x/text@v0.11.0
golang.org/x/crypto@v0.11.1-0.20230711161743-2e82bdd1719d golang.org/x/text@v0.11.0
golang.org/x/net@v0.12.1-0.20231027154334-5ca955b1789c golang.org/x/text@v0.11.0
golang.org/x/text@v0.11.0 golang.org/x/tools@v0.6.0
golang.org/x/text@v0.11.0 golang.org/x/mod@v0.8.0
golang.org/x/text@v0.11.0 golang.org/x/sys@v0.5.0

另外一种证明。 对于linux下的go生成的文件,大体使用了gcc生成的可执行程序。可以直接使用如下命令来查看是否存在该函数的调用。如果存在,则会出现binary matches字样

复制代码
grep ParseAcceptLanguage  xxxx

相关连接

https://go.dev/cl/442235
https://go.dev/issue/56152
https://groups.google.com/g/golang-announce/c/-hjNw559_tE/m/KlGTfid5CAAJ
https://pkg.go.dev/vuln/GO-2022-1059
https://golangtutorial.dev/news/fix-in-golang-text-package/

相关推荐
1024奇点8 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
实名上网宋凯宣8 小时前
Django
后端·python·django
Warren2Lynch9 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
Knight_AL10 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
利威尔xu10 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
FRing0310 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
逃逸线LOF11 小时前
Ribbon负载均衡原理(Irule组件、源码分析)
后端·spring cloud·ribbon
by2099911 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河11 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
慢云智慧空间11 小时前
从设备智能到空间理解,空间智能终端解决方案商如何重新定义行业标准
后端