CVE-2023-38545(漏洞分析与检测方法)
curl:curl是一个用于传输数据的命令行工具和库,支持多种网络协议,如HTTP、FTP、SMTP等。它是一个广泛用于编程和自动化数据传输的工具。
libcurl:libcurl是curl的C语言库,允许开发人员在他们的应用程序中使用curl的功能。它是curl的核心组件。
curl团队于2023年10月11日发布curl的8.4.0版本。同时,他们还公开两个漏洞:CVE-2023-38545和CVE-2023-38546
什么是CVE-2023-38545?
该漏洞主要成因是在使用SOCKS5代理链接过程中造成的堆溢出。当Curl使用SOCKS5代理以便它解析地址时,主机名的最大长度为255字节。如果检测到主机名超过255字节,Curl将切换到本地主机解析地址,并将解析后的地址传递给代理。然而,由于程序bug,在建立延迟较高的 SOCKS5 链接过程中,此时主机解析地址可能会获取错误的值,此时会把过长的主机名也复制到缓冲区中。
主机名来自于提供给Curl解析的url。目标缓冲区是libcurl 中基于堆的下载缓冲区,缓冲区的默认大小为16kB,但可以由应用程序设置为不同的大小。Curl 工具默认将其设置为102400字节,但如果 --limit-rate 设置低于102400字节/秒,则会将缓冲区大小设置为较小的值。libcurl提供了CURLOPT_BUFFERSIZE选项来更改下载缓冲区的大小。libcurl 在 URL 中接受最多达65535字节的主机名。
要发生溢出,需要一个足够慢的SOCKS5连接来触发局部变量bug,并且客户端使用的主机名长于下载缓冲区。通过恶意的 HTTPS 服务器进行重定向到一个特别设计的 URL。某些较老的服务器延迟可能足以触发此漏洞。堆溢出仅可能在未设置 CURLOPT_BUFFERSIZE 或将其设置为小于 65541的情况下发生。
在libcurl中,导致使用远程主机名的SOCKS5的选项为:将CURLOPT_PROXYTYPE设置为CURLPROXY_SOCKS5_HOSTNAME类型,或者将CURLOPT_PROXY或 CURLOPT_PRE_PROXY 设置为使用socks5h://方案。其中一个代理配置环境变量可以设置为使用socks5h://方式,例如http_proxy、HTTPS_PROXY或 ALL_PROXY。在Curl工具中,导致使用远程主机名的SOCKS5的选项为:--socks5-hostname,或者将--proxy或--preproxy设置为使用socks5h:// 方式。
看了下源码,罪魁祸首在这里:
hostname 来自命令行的输入,想弄多长都行。
socksreq是预分配的空间,承受不住任意长度的输入。
漏洞利用
执行如下命令
修复建议
Linux / MacOS
Windows
修复建议
升级 curl 和 libcurl 到 8.4.0 或更高版本
避免将 CURLPROXY_SOCKS5_HOSTNAME 代理与 curl 一起使用
避免将代理环境变量设置为 socks5h://
- 下一篇:电气控制系统如何助力临氢部件测试
- 上一篇:国家数据局成立对汽车数据安全的影响
-
汽车测试网V课堂
-
微信公众号
-
汽车测试网手机站
最新资讯
-
用于高压电池测试的加速度计
2024-11-05 14:44
-
卡特彼勒新一代240吨电动矿卡投入使用
2024-11-05 14:43
-
[法规] 欧盟发布重型车辆事件数据记录仪(E
2024-11-05 14:43
-
城无界野无疆 柴油混动火星9越野版曝时尚越
2024-11-05 12:02
-
L2和L3级智能驾驶车辆驾驶员的角色转变研究
2024-11-05 10:34