【已复现】curl SOCKS5 堆溢出漏洞(CVE-2023-38545)安全风险通告第二次更新

【已复现】curl SOCKS5 堆溢出漏洞(CVE-2023-38545)安全风险通告第二次更新

原创 QAX CERT 奇安信 CERT 2023-10-12 17:15

● 
点击↑蓝字关注我们,获取更多安全风险通告

漏洞概述

漏洞名称

curl SOCKS5 堆溢出漏洞

漏洞编号

QVD-2023-23751、CVE-2023-38545

公开时间

2023-10-10

影响对象数量级

亿级

奇安信评级

高危

CVSS 3.1分数

7.0

威胁类型

代码执行

利用可能性

POC状态

已公开

在野利用状态

未发现

EXP状态

未公开

技术细节状态

已公开

利用条件:需要通过socks5代理,且url可控。

(注:奇安信CERT的漏洞深度分析报告包含此漏洞的POC及技术细节,订阅方式见文末。)

01

漏洞详情

>
>
>
>

影响组件

curl 从 1998 年维护至今,已经成为 HTTP 请求命令行工具的事实标准,具有丰富的 Api 和 Abi(应用程序二进制接口)。curl被用于汽车、电视机、路由器、打印机、音频设备、手机、平板电脑、医疗设备、机顶盒、电脑游戏、媒体播放器等各种设备中,并且在超过200亿个安装中作为互联网传输引擎被成千上万的软件应用程序使用。

libcurl是curl的一个开发库,它提供了用于进行网络通信和数据传输的API和功能。libcurl库允许开发人员在自己的应用程序中集成curl的功能,以便进行HTTP、FTP、SMTP等协议的数据传输。通过libcurl,开发人员可以方便地执行各种网络操作,例如发送HTTP请求、下载文件、上传文件等。libcurl是一个非常流行和广泛使用的网络库,常用于编写网络应用程序和客户端。

>
>
>
>

漏洞描述

近日,奇安信CERT监测到官方发布新版本修复curl SOCKS5 堆溢出漏洞(CVE-2023-38545)
,当使用socks5代理时,如果主机名大于255则curl会尝试使用本地解析代替远程解析,但没有按照预期工作,导致内存损坏,攻击者可以构造恶意主机名触发漏洞,成功利用该漏洞将造成代码执行。

鉴于此漏洞影响范围较大,建议客户尽快做好自查,经奇安信CERT研判漏洞利用条件苛刻,客户不必惊慌,可酌情排期修复。

本次更新内容:

新增产品线解决方案;

新增排查建议。

02

影响范围

>
>
>
>

影响版本

7.69.0 <= libcurl <= 8.3.0

>
>
>
>

不受影响版本

Libcurl >= 8.4.0

Libcurl < 7.69.0

>
>
>
>

其他受影响组件

大多数现代操作系统都使用 libcurl,包括但不限于:

Android、Chrome OS、Cisco IOS、iOS、ipadOS、Linux、macOS、OpenBSD、RISC OS、SunOS、tvOS、ucLinux、vxWorks、WebOS、Windows、Xbox System。

将libcurl用作依赖项的软件包数量同样巨大,包括但不限于:

git, libcurl4-gnutls-dev, python-pycurl, libcurl4-openssl-dev, rng-tools, gnupg2, zabbix-agent, systemd, apache2-bin, xmlrpc-c-client, sssd-common, ipa-client, certmonger, php-curl, fwupd, libfwupd2, libreoffice-core, librepo, libraptor2-0, libcmis-0.5-5v5, python3-pycurl, passenger, geoipupdate, libappstream4, rsyslog, NetworkManager, python3-librepo, php8.1-curl, elfutils-debuginfod-client, cargo, python27-pycurl, git-core, mariadb-connector-c, apt-transport-https, php7.0-curl, google-chrome-stable, NetworkManager-cloud-setup, google-compute-engine-oslogin, qemu-block-extra, tpm2-tss, strongswan, syslog-ng-core, libcfitsio8, libcurl-devel, gnupg1。

03

复现情况

目前,奇安信CERT已成功复现curl SOCKS5 堆溢出漏洞(CVE-2023-38545),截图如下:

04

处置建议

>
>
>
>

安全更新

目前官方已发布最新版本,建议受影响用户升级至 libcurl >= 8.4.0:

git clone https://github.com/curl/curl.git

./configure –withguntls

make && make install

暂时无法升级的用户建议:

不要与 CURLPROXY_SOCKS5_HOSTNAME 代理一起使用;

不要将代理环境变量http_proxy、all_proxy和https_proxy设置为socks5h://

>
>
>
>

排查方案

依赖libcurl的软件可能会动态依赖系统lib目录下的libcurl或者静态打包入内,可以使用如下python脚本扫描/lib目录内含有受影响libcurl版本的so并输出对应so路径:

import re
import os
import subprocess


libcurl_pattern = r"^libcurl\/(7\.(?:6[9]|([7-9]\d)|[1-9]\d{2,})\.\d+|8\.(?:([0-2]\.\d+|3\.0)))$"
libcurl_regex = re.compile(libcurl_pattern)
so_pattern = r".*\.so(\.\d+)*$"
so_regex = re.compile(so_pattern)


root_dir = "/lib/"




for root, dirs, files in os.walk(root_dir):
    for file in files:
        if so_regex.match(file):
            file_path = os.path.join(root, file)
            p = subprocess.Popen(["strings", file_path],
                                 stdout=subprocess.PIPE)
            p2 = subprocess.Popen(
                ["grep", "-P", "^libcurl\/(7\.(?:6[9]|([7-9]\d)|[1-9]\d{2,})\.\d+|8\.(?:([0-2]\.\d+|3\.0)))$"], stdin=p.stdout, stdout=subprocess.PIPE)
            output = p2.communicate()[0].decode('utf-8')
            if "curl" in output:
                # print(output)
                print("vulnerable .so path:"+file_path +
                      "\tversion "+output.strip())
print("Done!")

Debian系统可以使用包管理器查找依赖libcurl的包:

dpkg -l | grep libcurl

>
>
>
>

产品解决方案

奇安信开源卫士已支持

奇安信开源卫士20231011. 408版本已支持对curl SOCKS5 堆溢出漏洞 (CVE-2023-38545)的检测。

05

参考资料

[1]https://curl.se/docs/CVE-2023-38545.html

06

时间线

2023年10月11日,奇安信 CERT发布安全风险通告;

2023年10月12日,奇安信 CERT发布安全风险通告第二次更新。

07

漏洞情报服务

奇安信ALPH
A威胁分析平台已支持漏洞情报订阅服务:

奇安信 CERT

致力于
第一时间为企业级用户提供权威漏洞情报和有效
解决方案。

点击↓阅读原文,到ALPHA威胁分析平台
查看更多漏洞信息。