libcurl Socks5 堆缓冲区溢出漏洞(CVE-2023-38545)详细分析

这篇具有很好参考价值的文章主要介绍了libcurl Socks5 堆缓冲区溢出漏洞(CVE-2023-38545)详细分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

curl 是用于在各种网络协议之间传输数据的命令行工具,libcurl 用于提供处理网络通信和数据传输的 Api 接口。curl 默认下载缓冲区为 102400 字节,但如果设置低于每秒 102400 字节,缓冲区大小会自动设置为更小的值。libcurl 下载缓冲区默认为 16KB,应用程序可通过 CURLOPT_BUFFERSIZE 选项设置其大小。

受影响版本中,libcurl 对于 Socks 代理过程中解析的主机名长度未正确限制,使用 libcurl 的应用程序在未设置 CURLOPT_BUFFERSIZE 或将其设置小于 65541 时会造成堆缓冲区溢出;由于 curl 工具默认将 CURLOPT_BUFFERSIZE 设置为 100KB,因此除非用户将速率通过 --limit-rate 限制设置为每秒小于 65541 字节,默认不受影响。

当用户通过 socks 代理访问攻击者可控的地址时,如果攻击者通过 302 跳转等方式使得用户解析访问大于缓冲区长度的域名,可能造成拒绝服务,针对特定的平台和软件可能造成远程代码执行。

漏洞信息

标题 libcurl Socks5 堆缓冲区溢出漏洞
漏洞类型 基于堆的缓冲区溢出(CWE-122)
评分 7.0
漏洞等级 高危
处置建议 建议修复
利用所需权限 无需权限
利用难度
影响范围 广
POC 已公开
复现时间 2023/10/11

漏洞复现过程

  1. 配置代理,可以使用 https://github.com/MisterDaneel/pysoxy 或者使用 clashx 的代理(7890 端口)
$ git clone https://github.com/MisterDaneel/pysoxy
$ cd pysoxy
$ python3 pysoxy.py
  1. 将 127.0.0.1 「一万个 A」解析加入到/etc/hosts 中,用于传递 hostname 到代理解析时返回结果。
    libcurl Socks5 堆缓冲区溢出漏洞(CVE-2023-38545)详细分析,漏洞分析,漏洞,网络安全,安全

  2. 执行命令 curl --limit-rate 1025 -vvv -x socks5h://localhost:7890 $(python3 -c “print((‘A’*10000), end=‘’)”)
    默认 curl 是 100kB 的缓冲区,需要使用–limit-rate 1025 限制为 1025 后,1 万个字符的可导致堆溢出。
    libcurl Socks5 堆缓冲区溢出漏洞(CVE-2023-38545)详细分析,漏洞分析,漏洞,网络安全,安全

影响分析

漏洞利用可能性与危害

该漏洞利用条件较高,预估能实际造成严重危害的场景相对有限。

  1. 通过 libcurl 在通过 socks 代理的情况下访问攻击者可控制的地址。(攻击者可能通过 302 跳转诱使解析访问超长的域名)
  2. 从利用结果上看,导致拒绝服务是比较容易的,但要造成远程代码执行,需要根据具体的应用、操作系统平台进行构造,黑盒场景通常难以利用。

curl 的应用范围

Curl 从 1998 年维护至今,已经成为 HTTP 请求命令行工具的事实标准,具有丰富的 Api 和 Abi(应用程序二进制接口),因此被广泛应用于需要网络传输的产品或设备中,如手机/平板、操作系统、服务器、医疗和物联网设备等。

curl/libcurl 还广泛应用于以下方面:

  • GitHub 中有 2.6 万个相关的开源项目,墨菲安全分析发现其中 php、shell、JavaScript、Python、C/C++项目中使用较多,在 Java、Go、Ruby 项目中使用较少:
    libcurl Socks5 堆缓冲区溢出漏洞(CVE-2023-38545)详细分析,漏洞分析,漏洞,网络安全,安全

curl/libcurl 相关不同语言的开源代码仓库占比

  • 具有网络传输功能的客户端应用程序,如办公套件 LibreOffice、火狐浏览器等;
  • 几乎所有的操作系统,如:Linux、Windows、macOS、iOS 和 Android 等。

排查方式

curl

从引入依赖的方式来看,通常应用中会通过系统命令直接调用 curl,例如在 shell 中通过调用 curl 进行 http 请求。
此时需要考虑系统发行版中自带的 curl,以及应用中可以打包包含的 curl 文件。
curl -V命令输出的 banner 信息可作为其特征:
$ curl -V
curl 7.68.0 (x86_64-pc-linux-gnu) libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.3.0 libpsl/0.21.0 (+libidn2/2.2.0) libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3
Release-Date: 2020-01-08
可以分别从进程和系统环境中排查:

  • 对于系统环境中的 curl,可以通过curl -V | egrep -o '^curl [678]+.[0-9]+.[0-9]+'获取对应的版本
  • 对于进程中的 curl,可以通过对文件进行识别,如strings curl | egrep -o ‘^curl [678]+.[0-9]+.[0-9]+’

libcurl

在 libcurl 中也存在相同的特征:
CLIENT libcurl 7.44.0-DEV
libcurl/7.44.0-DEV
libcurl 通常以动态链接库的形式存在,如libcurl.so.4.8.0,应用依赖的 libcurl,可能存在于系统 lib 目录,如/usr/lib/,也可能被应用直接打包进应用目录。
因此排查需要考虑:

  • 对系统 lib 目录及应用目录中的文件分析,如strings libcurl.so | egrep -o ‘libcurl -/’
  • 运行中的应用可以通过分析进程打开文件来判断,如sudo lsof | egrep -o ‘/..so.’ | xargs -I {} bash -c “strings {} | egrep -o ‘libcurl -/’”

修复方案

升级

  • 升级 curl 和 libcurl 到 8.4.0 或更高版本

缓解措施

  • 避免将 CURLPROXY_SOCKS5_HOSTNAME 代理与 curl 一起使用
  • 避免将代理环境变量设置为 socks5h://
    补丁
    官方已发布补丁:https://github.com/curl/curl/commit/4a4b63daaa

参考链接

https://www.oscs1024.com/hd/MPS-cpg0-9qk3
https://curl.se/docs/CVE-2023-38545.htm
https://daniel.haxx.se/blog/2023/10/11/how-i-made-a-heap-overflow-in-curl/
https://gist.github.com/xen0bit/0dccb11605abbeb6021963e2b1a811d3
https://hackerone.com/reports/2187833文章来源地址https://www.toymoban.com/news/detail-720545.html

到了这里,关于libcurl Socks5 堆缓冲区溢出漏洞(CVE-2023-38545)详细分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 漏洞利用与缓冲区溢出攻击

    目录 简介: 1. 漏洞利用基础 2. 缓冲区溢出攻击 3. 缓解缓冲区溢出攻击 3.1 边界检查 3.2 使用安全函数 3.3 使用堆栈保护技术 总结: 简介: 漏洞利用是渗透测试中的重要部分,它允许攻击者通过利用软件或系统的漏洞来获取未经授权的访问权限。其中,缓冲区溢出攻击是最常

    2024年02月14日
    浏览(99)
  • 【HUST】网络攻防实践|6_物联网设备固件安全实验|实验一 裸机缓冲区溢出漏洞利用

    写在最前: 大家分析的时候看一下自己学号是多少,然后分析对应的文件哈,我想都没想就打开01分析了,全部都做完了发现我不是这个文件,当事人现在就是很后悔,非常后悔呜呜呜呜呜。 打开 IDA Pro 7.6 ,打开 task1_0x.elf 文件, 选对应的选项。 然后点开 main 函数, f5 反汇

    2024年02月09日
    浏览(52)
  • SEED-缓冲区溢出攻击

    实验环境:SEED-Ubuntu20.04虚拟机 a) 缓冲区溢出原理 **缓冲区溢出攻击原理:**利用溢出的数据改变源程序的控制流,如覆盖返回地址 b) 分析生成badfile文件的exploit.py程序 Shellcode部分 字节数组末尾处填入shellcode c) 编译目标服务器上具有缓冲区溢出漏洞的stack.c程序,并将其缓冲

    2024年02月07日
    浏览(45)
  • 网络安全——缓冲区溢出攻击

    1、缓冲区溢出概述 什么是缓冲区?它是指程序运行期间,在内存中分配的一个连续的区域,用于保存包括字符数组在内的各种数据类型。所谓溢出,其实就是所填充的数据超出了原有的缓冲区边界,并非法占据了另一段内存区域。 两者结合进来,所谓缓冲区溢出,就是由于

    2024年02月13日
    浏览(48)
  • [操作系统安全]缓冲区溢出

    一、C栈帧结构 函数调用内存中的三个区域,代码区、静态数据区、动态数据区(压栈和清栈就是在这个区域完成的)。 CPU 中有三个寄存器,分别是eip、ebp和esp。eip永远指向代码区中将要执行的下一条指令,执行方式包括顺序执行和跳转;ebp和esp用于管理栈空间,ebp指向栈底

    2024年02月03日
    浏览(41)
  • 网络安全威胁——缓冲区溢出攻击

    (1)缓冲区 缓冲区 是一块连续的计算机内存区域,用于在将数据从一个位置移到另一位置时临时存储数据。这些缓冲区通常位于 RAM 内存中,可保存相同数据类型的多个实例,如字符数组。 计算机经常使用缓冲区来帮助提高性能,大多数现代硬盘驱动器都利用缓冲优势来有

    2024年01月16日
    浏览(45)
  • 5.1 缓冲区溢出与攻防博弈

    在黑客安全圈子中,基于内存攻击技术的攻击手段在随着时代的变化而不断发展着,内存攻击是指通过利用软件的安全漏洞,构造恶意的输入,从而使正常程序造成拒绝服务或者是远程获得控制权,内存攻击技术中最先登上历史舞台的就是缓冲区溢出漏洞,时至今日能够被广

    2024年02月16日
    浏览(38)
  • Redis缓冲区溢出及解决方案

    缓冲区(buffer),是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。 在Redis中,主要有三个场景用到了缓冲区的概念。 在客户端和服务器端之间进行通信时,用来暂存客户端发送

    2023年04月12日
    浏览(43)
  • 网络安全威胁,如何解决缓冲区溢出攻击

    目录 一、什么是网络安全 二、什么是缓冲区 三、缓冲区溢出 四、缓冲区溢出攻击的类型 网络安全(Network Security)指的是保护计算机网络及其相关设备、系统和数据免受未经授权访问、破坏、篡改、窃取或滥用的威胁和攻击。随着网络的普及和应用的广泛,网络安全变得越

    2024年02月21日
    浏览(43)
  • 黑客攻击实战案例:12种开源情报收集、缓冲区溢出漏洞挖掘、路径遍历漏洞、自定义参数Cookie参数绕过2FA、二维码的XSS、恶意文件上传清单、反射型XSS漏洞、威胁情报搜索引擎

    黑客攻击实战案例:12种开源情报收集、缓冲区溢出漏洞挖掘、路径遍历漏洞、自定义参数Cookie参数绕过2FA、二维码的XSS、恶意文件上传清单、反射型XSS漏洞、威胁情报搜索引擎。 目前漏洞挖掘的常用方法只有一种就是人工分析为主,漏洞挖掘在很大程度上是个人行为,漏洞

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包