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/

相关推荐
咕德猫宁丶23 分钟前
Spring Boot 邂逅Netty:构建高性能网络应用的奇妙之旅
java·spring boot·后端
西猫雷婶23 分钟前
python学opencv|读取图像(四十三)使用cv2.bitwise_and()函数实现图像按位与运算
开发语言·python·opencv
C++小厨神28 分钟前
C#语言的函数实现
开发语言·后端·golang
qwe35263329 分钟前
自定义数据集使用scikit-learn中的包实现线性回归方法对其进行拟合
开发语言·python
S-X-S38 分钟前
OpenAI模块重构
开发语言·重构·openai
计算机-秋大田1 小时前
基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)
java·开发语言·后端·微信·小程序·课程设计
llp11101 小时前
基于java线程池和EasyExcel实现数据异步导入
java·开发语言
四念处茫茫1 小时前
【C语言系列】深入理解指针(3)
c语言·开发语言·visual studio
Continue20211 小时前
golang 使用双向链表作为container/heap的载体
链表·golang·优先队列·双向链表·heap·container/heap
梦想画家3 小时前
Golang Gin系列-8:单元测试与调试技术
golang·单元测试·gin