2023年10月11日,curl官方发布了一篇关于curl项目的安全警告,报告指出curl组件存在SOCKS5缓冲区溢出漏洞(CVE-2023-38546)。奇安信技术研究院“天问”软件供应链安全监测平台通过对历史数据进行测绘,发现大量的桌面软件、安卓应用和设备固件使用了curl组件的漏洞版本,同时发现开源生态中的组件也存在直接引用系统中libcurl的情况。对此”天问“平台推出了专用检测工具供用户自查。

1. 背景介绍

curl是一个非常流行、广泛使用的开源软件项目,提供用于使用各种网络协议传输数据的库 (libcurl) 和命令行工具 (curl)[1]。libcurl 是一个免费的客户端 URL 传输库,支持多种协议,包括HTTP、HTTPS、FTP、SCP、SFTP等。curl 是一个使用libcurl实现的命令行工具,用于使用 URL 语法获取或发送数据。

2023年10月11日,curl官方发布了一篇关于curl项目的安全警告[2],报告指出curl组件(版本 >=7.69.0, <=8.3.0)存在SOCKS5缓冲区溢出漏洞(CVE-2023-38546),漏洞补丁以及修复后的版本随报告同时发出。漏洞详情如下: 当使用SOCKS5代理时,curl会被要求将主机名传递给SOCKS5代理解析而不是由自己完成,这里主机名的最大长度是255字节。如果检测到主机名长度超过255字节,curl会切换到本地解析,而只将解析后的地址传递给代理。由于没有按照预期工作,curl会将过长的主机名复制到目标缓冲区,从而导致堆缓冲区溢出。攻击者可以通过构造恶意主机名触发漏洞并利用该漏洞实现代码执行。

由于curl组件广泛应用于操作系统和软件中,开源生态如PyPI、NPM和crates.io等都存在调用系统中的libcurl库的情况,没有及时修复的curl组件将会产生严峻的安全影响。针对这种情况,奇安信技术研究院“天问”软件供应链安全监测平台提供软件成分分析功能,能够从软件中提取可能使用的组件和版本并给出安全建议。我们使用“天问”系统,对该漏洞在桌面软件、安卓应用、固件以及开源生态中的影响范围进行测绘,并公布数据分析结果。

您也可以使用“天问”平台推出的业界首个CURL SOCKS5堆溢出漏洞(CVE-2023-38545)的一键排查解决方案,支持在线和离线两种检测模式,帮助广大用户快速判断自身在用软件系统是否受该漏洞影响,具体使用方式详见第5小节。

2. 天问的能力

奇安信技术研究院“天问”软件供应链安全监测平台基于强大的知识库储备,拥有软件供应链影响范围的测绘能力,能够自主进行软件成分分析并生成软件影响图谱。天问平台具备三大能力:软件组成成分分析能力、全网软件空间测绘能力和安全事件监测预警能力。用户可通过浏览器访问天问平台,将待测试软件直接上传天问进行分析。天问支持跨CPU指令集、支持跨操作系统平台检测,目前支持十余种软件安装包格式,二十余种打包格式和十余种固件格式的的分析,还支持对Docker等容器镜像的分析。

天问检测的基本原理是从样本中进行文件解剖,提取出各种各样的原始文件,并且对所有的原始文件进行细粒度、高精度的分析,从而关联到这些文件所对应的组件,然后根据我们庞大的漏洞数据库,来对这些组件的漏洞信息进行一个关联,最终得到了分析对象的潜在漏洞列表。基于上述强大的样本分析能力,天问对海量的样本进行了细粒度的分析,形成了独有的软件空间测绘数据库。目前,该数据库已经有超过6,000万个节点,它们之间的关联关系已经超过了4亿条。

当“天问”平台监测到curl组件的漏洞时(CVE-2023-38545),我们立刻对curl组件的影响进行了初步的分析。共从安卓应用、固件、历史分析软件和软件源四个部分进行了分析,包括该组件在软件中的使用范围以及该组件的漏洞版本的使用范围。

2.1 安卓应用

我们对安卓应用的分析主要是安装包(APK),从87,855个APK中检出了18,797个APK使用了curl组件,其中符合漏洞版本范围的为5,078个,检出率为**5.78%**。

这些APK通过使用so文件的方式直接或者间接引用了curl组件,我们总共检测出符合版本范围的so文件共5,811个。因为这些so文件引用了curl组件,从而导致APK文件间接引用了curl组件,这其中curl组件被libunity.so和libalivcffmpeg.so文件所引用次数最多。直接使用libcurl.so文件的方式仅为120次,远不如间接使用的次数多。由于间接引用组件的修复比直接引用的修复更加困难,这也反映了curl组件的漏洞影响将会在安卓应用中持续很久,直到所有组件引用的curl均更新到不受漏洞影响的版本。

前十名使用curl组件的文件统计如下图:
figure

在这些检测出的APK文件中我们发现了多款知名的应用,尽管这些应用的版本并不一定是最新版本。我们的初步检测中发现曾使用过curl和libcurl组件的应用包括小红书、喜马拉雅、猿辅导、小黑盒、作业帮、酷狗音乐、咪咕视频、央视新闻、哔哩哔哩和贝壳找房等许多知名应用。根据小米、vivo和oppo各渠道汇集的Top 500国内应用清单,我们从其中检测出了66个应用含有该组件,检出率为13.20%。

2.2 固件

我们对收集到的路由器、摄像头和智能家居设备等的固件进行了分析,从156,787个固件文件中检出了23,865个固件文件使用了curl组件,其中符合版本范围的共1287个,检出率为0.82%。

通过分析固件中引用curl组件的文件时,发现名为libcurl.so.4.7.0的文件在固件中使用的次数最多,达617次。其余的文件也均是直接引用了curl组件,修复难度相较于间接引用较小。

使用curl组件的文件统计如下图:
figure

从这些固件中我们发现了知名的产品,其中有Axis网络摄像头、TP-Link路由器、小米手机和山石云池等。同样需要强调的是我们仅是初步分析了它们的以往固件,并不一定是最新版本,使用产品的用户还是需要及时更新产商提供的最新固件。

2.3 历史分析软件

我们的历史分析软件是天问的历史分析样本,主要为PE文件和压缩包等。从2,226,538个原始样本中检测到了6,758个引用curl组件的终端软件,其中符合版本范围的有5,011个,检出率为0.26%。文件类型包括4,719个exe,63个rar,29个zip,14个aar和4个7z,剩余为其他类型。

其中curl版本为7.77.0影响的软件最多,达404款,其次是7.73.0影响353款软件、7.74.0影响331款软件和7.71.1影响305款软件。可以看出引用curl7.7x.x版本的软件较多,且版本在漏洞影响范围内并存在严重风险,需要及时修复。

这些检测到的终端软件中包括网易、快手、上海巨人、护盾科技、爱奇艺、北京华网智讯、杭州凤侠网络科技和天极集团等公司旗下软件的历史版本。针对以上厂商,“天问“选取了两款软件进行测绘分析,具体案例如下:

(1)x-studio-Pro_10.0.9000.92.exe

被分析的样本名为101030f5952fc7559556f35cedde010a.exe,对其证书分析得到该软件原名x-studio-Pro_10.0.9000.92.exe,版本为2021.4.1,所属公司Simdsoft Limited。

从图中可以看出101030f5952fc7559556f35cedde010a.exe在安装过程中直接释放了7.76.1版本的libcurl.dll, 同时101030f5952fc7559556f35cedde010a.exe也通过释放adxe.dll的方式间接调用了libcurl.dll。这说明软件和组件之间存在复杂的调用方式。libcurl.dll直接或间接影响所有调用它的终端软件。

(2)StellarPlayerInstaller.exe

通过查询7.71.0版本的libcurl.dll可以回溯出其影响的软件,从图库可以看出7.71.0版本的libcurl.dll直接或间接影响StellarPlayerInstaller.exe的十几个历史版本。

部分影响版本如下:

软件名 版本号
Stellar_20220426124310_official_stable_full_x86.exe 1.22.426.763
Stellar_20220902162757_official_stable_full_x86.exe 1.22.902.987
Stellar_20220524182717_official_stable_full_x86.exe 1.22.524.1107

2.4 软件源

我们分析的软件源主要是麒麟源,它作为麒麟操作系统的官方软件源,拥有大量国产软件。通过分析该软件源中的1,211,968个软件,发现了663个含有curl组件的软件,其中符合版本范围的有85个,检出率为0.007%。

3.部分知名开源组件受到威胁

3.1 PyPI

在PyPI生态中,pycurl包装了用户本机中的libcurl库,提供了相应的Python调用接口,实现更快的网络访问请求。当用户本机的libcurl是有存在漏洞的版本,那么使用pycurl的软件也会受到攻击威胁。 pycurl被PyPI中273个包的3578个版本直接依赖,而其本身的单日下载量也超过了4万次,影响非常广泛。

3.2 NPM

在npm生态中,针对Node.js的libcurl库绑定软件包node-libcurl也可能导致安全风险。这一软件包影响了npm生态系统中325个npm包的1838个版本。它的最近7天各版本下载总量就达到了39,000多次。

3.3 crates.io

在crates.io中,curl-sys 使用了本机的libcurl 库,存在受libcurl组件漏洞版本影响的风险,目前它已将使用的curl版本更新到了最新版本。根据官方提供的数据,该包的下载总量达16,287,888次。同时,直接使用该包的组件有rust的包管理器cargo和进一步封装该包的工具curl等知名的rust包。

Untitled

curl包是同一作者在curl-sys基础上进一步封装的包,下载总量达14,681,946。该包的直接引用达230个,其中有多个rust包的下载总量超过400万,如sentrygit2-curl等。

Untitled

4. 处置建议

根据官方公告[1],目前curl组件已发布修复后的版本8.4.0,受影响用户可以更新到该版本以及之后的版本。

对于无法更新curl版本的用户,官方也提供了旧版本的补丁集合,开发人员可以根据自身curl版本应用相应的补丁。

另外,无法更新版本和补丁的用户,还可以通过以下方式避免受漏洞影响:
a.不要将 CURLPROXY_SOCKS5_HOSTNAME 代理与 curl 一起使用
b.不要将代理环境变量设置为socks5h://

5.“天问”libcurl专用检测工具

我们建议您使用“天问”平台推出的CURL SOCKS5堆溢出漏洞(CVE-2023-38545)离线检测工具(天蚕3.0-libcurl漏洞离线专查版)对系统中的软件进行检测,及时发现并排除漏洞风险。该专查工具所有分析检测过程全部在被测主机上离线完成,不需要将任何信息回传服务器,解决了敏感信息泄露的担忧。

使用方式:访问“天问”软件供应链安全监测平台,点击右上角使用邀请码注册并登录平台,登录之后点击“软件测试”功能菜单,即可下载离线专查工具。

邀请码:8d10kv0ap68uk78c7497f5g0q10bc2cw



工具截图:

6. 结语

以上的数据仅是我们初步分析的结果,没有对可疑软件进行进一步的验证。对于没有解析出curl组件版本的软件均没有出现在我们检测出的数据中。但通过这些数据以及libcurl在开源生态中的广泛使用,我们认为该漏洞的影响范围依然很大,直接或间接使用到curl组件的用户还需及时更新软件版本。奇安信技术研究院“天问”软件供应链安全监测平台将会持续对该组件进行观测,后续会发布更多的关于该组件影响的数据和报告。

参考链接

  1. https://en.wikipedia.org/wiki/CURL
  2. https://curl.se/docs/CVE-2023-38545.html