HackerNews

HackerNews
研究人员演示 OpenBSD Root 漏洞利用,串联 37 年前的共享内存缺陷

研究人员演示 OpenBSD Root 漏洞利用,串联 37 年前的共享内存缺陷

给文章评分:

今天公布的一个本地权限提升漏洞利用,通过串联一个约 37 年前的整数溢出与另一个独立的内核缺陷,在 OpenBSD 7.9 上获得 root 权限,绕过了 OpenBSD 的 KARL 内核地址随机化及其 SMAP 和 SMEP 硬件保护。

发现并报告这些漏洞的安全公司 Calif,在 OpenBSD 于 9 月发布两个问题的补丁后,公布了详细的文章和完整的 PoC 代码。

shmat(4) 附加函数中的整数溢出已在 errata 018 中修复,该补丁于 9 月 14 日作为可靠性修复发布。完成整个利用链的引用计数 use-after-free 在 errata 026 中单独修复,于 9 月 30 日作为安全修复发布。

两者均可通过 syspatch 获取,并覆盖所有架构。OpenBSD 7.8 也收到了整数溢出的修复。整数溢出是完整利用链的入口,被归类为可靠性修复,而非安全修复。

截至发布时,两个漏洞均未分配 CVE。没有证据表明这些漏洞已被用于攻击。

共享内存附加计数器 shm_nattch 在可追溯到 1988 年的原始 BSD 源代码中被定义为有符号 16 位 short,最大值为 32,767。OpenBSD 继承了这个类型,从未将其加宽。

该漏洞利用映射了 127 个共享内存段并 fork 出 259 个进程,将计数器推过最大值并回绕到 −32,643。随后一个竞态条件触发了 use-after-free:被破坏的引用计数导致内核释放了其他进程仍在使用的内存。

一个单独的越界写入覆盖了内核中的多播成员计数器。当受影响的套接字关闭时,由此产生的递减修改了页表项,将用户内存映射切换为超级用户可访问,从而绕过 SMAP 和 SMEP。随后,该漏洞利用覆盖了一个可预测内核地址处的函数指针,以运行自己的代码。

"虽然 OpenBSD 的 KARL 会重新链接内核二进制文件以随机化函数和数据地址,但内核的内存分配器仍然是确定性的,"研究员 Andrew Griffiths 写道。启动时分配器和最佳适配分配器都缺乏基址随机化,因此早期启动结构,包括 lo0 和 enc0 网络接口处理程序中的函数指针,在同一硬件的多次重启中都会落在相同的地址。该漏洞利用不需要任何信息泄露漏洞。

除两个勘误外,Calif 提出了四类加固措施:内核链表的安全解除链接(FreeBSD 和 NetBSD 已在使用)、页表自引用映射的随机化、内核分配器随机化,以及基于编译器的边界检查。

Calif 表示,它"今年早些时候"向 OpenBSD 报告了这些漏洞。PoC 漏洞利用代码已在 GitHub 上提供。


消息来源:thehackernews.com;
本文由 HackerNews.cc 翻译整理,封面来源于网络;
转载请注明“转自 HackerNews.cc”并附上原文
分享到:
hackernews

hackernews

该作者暂无简介