当前位置: 首页 > 科技观察

CVE-2021-3115-GolangWindows版RCE漏洞

时间:2023-03-19 22:00:55 科技观察

1月,Google工程师修复了Go语言(Golang)中的一个远程代码执行漏洞。该漏洞CVE编号为CVE-2021-3115,该漏洞主要影响使用goget命令的WindowsGo用户。不可信目录路径查找RCE该漏洞由日本安全研究员RyotaK发现,属于命令注入漏洞。该漏洞的根本原因在于用户运行goget命令提取库时编译过程的工作方式。在Windows系统上,用户或程序运行的操作系统shell命令会导致shell在当前目录中搜索与命令相关的二进制文件或可执行文件,然后在系统PATH变量中指定目录列表。例如,在Windows命令窗口输入netstat,Windows会在当前目录下搜索netstat.exe、netstat.bat或其他netstat.*可执行文件,这些搜索到的文件会优先执行。测试WindowsPATH查找如果当前目录中不存在与netstat相关的可执行文件,Windowsshell将查找位于Windows%PATH%变量中的netstat系统工具。由于与此行为相关的安全风险,WindowsPowerShell和Unixshell在执行命令时都放弃了此默认行为,并开始优先考虑不受信任的当前目录上的%PATH%变量位置。也就是说,在PowerShell中运行netstat将启动netstat系统工具,而不是本地的netstat.bat,因为PowerShell会优先在%PATH%目录中搜索具有该名称的二进制文件。为了保持一致性,Golang二进制文件在Unix系统上遵循Unix规则,在Windows系统上遵循Windows规则。也就是说,运行以下命令在Unix和Windows系统上会产生不同的行为:在Unix系统上,将首先搜索$PATH变量以查看其受信任位置是否有go二进制文件。这种优先考虑本地、不受信任的目录的方法也在Go帮助程序和编译器中实现,例如cgo,一个生成Go包以调用C代码的工具。当Cgo在Windows系统上编译C代码时,Golang可执行文件首先在不受信任的本地目录中搜索GCC编译器。Cgo运行的go命令会包含包资源。因此,攻击者可以使用cgo启动恶意gcc.exe程序。虽然这种行为可能是由多个编译器、库等引起的,但Golang项目决定修复该漏洞并发布了补丁。总结研究员RyotaK表示,该漏洞的发现受到了CVE-2020-27955漏洞的启发,该漏洞是GitLFS中的一个命令注入漏洞,是一种不安全的文件执行导致的GitLFS远程代码执行漏洞。.研究人员建议用户升级到最新的Gov1.14.14版本,避免该漏洞被利用。本文翻译自:https://www.bleepingcomputer.com/news/security/google-fixes-severe-golang-windows-rce-vulnerability/如有转载请注明出处。