关于CVE-2023-6246:glibc 的 syslog() 中存在基于堆的缓冲区溢出提权漏洞的思考

admin 2024年2月1日19:37:39评论20 views字数 1789阅读5分57秒阅读模式

关于CVE-2023-6246:glibc 的 syslog() 中存在基于堆的缓冲区溢出提权漏洞的思考

漏洞利用原因:

  • 漏洞的根本原因是在 glibc 的 __vsyslog_internal() 函数中存在基于堆的缓冲区溢出。

  • 这种溢出可能允许攻击者通过构造恶意输入,覆盖堆中的特定数据,从而触发未经授权的行为或升级权限。

漏洞利用情况:

  1. 触发条件:

    • 漏洞的触发需要满足一定的条件,具体来说,需要 argv[0]openlog()ident 参数的长度超过 1024 字节。

    • 这意味着需要通过传递特定长度的参数来触发漏洞,通常在攻击者有一定控制权的情况下触发。

  2. 影响范围:

    • 受影响的系统包括 glibc 版本为 2.36 和 2.37 的系统,涉及多个 Linux 发行版,如 Debian 12 和 13、Ubuntu 23.04 和 23.10、Fedora 37 到 39 等。

    • 报告中明确指出在 Fedora 38 上成功利用了该漏洞,从而实现了从非特权用户本地升级权限至完全根权限。

  3. 利用结果:

    • 漏洞的成功利用可能导致本地权限升级,攻击者从非特权用户的权限提升到完全Root权限。

    • 在报告中提到,在 Fedora 38 上成功利用了漏洞,这表明攻击者可以通过此漏洞实现本地系统的完全控制。

思考部分:

Qualys 的安全团队在几个小时前发布了 glibc 中的线性两步堆缓冲区溢出 syslog()

206 buf = malloc ((bufsize + 1) * sizeof (char));...213 __snprintf (buf, l + 1,214 SYSLOG_HEADER (pri, timestamp, &msgoff, pid));...221 __vsnprintf_internal (buf + l, bufsize - l + 1, fmt, apc,222 mode_flags);

tl;dr 是指bufsizewhile0l用户控制的。Baron Samedit正如公告中提到的,在(惊人的) sudo 漏洞利用中扰乱 nss 结构 是在 glibc 上获取 root shell 的好方法。

虽然该错误存在于 glibc 中syslog,但人们出于性能/安全/速度/……原因运行自定义分配器并非闻所未闻。其中之一可能是,例如,hardened_malloc, GrapheneOS的以安全为中心的分配器,提出了这样一个问题:“会让hardened_malloc这个特定的错误在我的 x86_64 Debian 机器上无法利用吗?”

hardened_malloc使用基于大小的板隔离,由 PartitionAlloc推广。由于bufsize为零,因此这是一个 1 字节分配,属于 16 字节 size-class,是特殊字节之后最小的0。因此,要利用这一点,必须找到一个大小为 16 字节或更低的有趣对象来覆盖。但由于金丝雀是默认启用的,这变得更加困难:分配的大小实际上增加了 8 个字节,这意味着实际上必须找到一个大小为 8 字节或更低的有趣对象。

此外,16 字节的slab 最多可以包含256 个分配,并且被保护页包围,这意味着访问下面buf和上面的任何内容buf+(256*16)都会导致崩溃。

分配是随机的,这可能有助于暴力破解堆布局:如果当前的分配不可利用,则只需崩溃并重新开始。但它也会导致更多的崩溃,因为buf可能会分配得更靠近保护页面。

当然还有其他缓解措施,但它们在这种特殊情况下并不相关,例如在 上检查的金丝雀free,或完全消除线性溢出的ARM 的 MTE 。

鉴于适用于堆基的随机化量非常可笑hardened_malloc(每个区域 32G),对不在堆上的任何内容进行暴力破解是徒劳的。因此,人们必须在堆上 8 字节以下的对象中找到一些有趣的东西,比如像 中那样的损坏路径service_user,或者对函数指针的某些部分覆盖来调用 一次性小工具,……

原文地址:

https://dustri.org/b/musings-on-cve-2023-6246-on-hardened_malloc.html

参考阅读:
https://seclists.org/oss-sec/2024/q1/68

https://www.qualys.com/2024/01/30/cve-2023-6246/syslog.txt

奇安信CERT复现:

【已复现】glibc syslog堆溢出漏洞(CVE-2023-6246)安全风险通告

原文始发于微信公众号(Ots安全):关于CVE-2023-6246:glibc 的 syslog() 中存在基于堆的缓冲区溢出提权漏洞的思考

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月1日19:37:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   关于CVE-2023-6246:glibc 的 syslog() 中存在基于堆的缓冲区溢出提权漏洞的思考https://cn-sec.com/archives/2453950.html

发表评论

匿名网友 填写信息