共享内存漏洞已存在37年,可用于获取 OpenBSD 根权限

· 2026-10-19 19:59 · 19 阅读

Swati Khandelwal 2026-10-19 19:59 江苏

速修复

  聚焦源代码安全,网罗国内外最新资讯!

编译:代码卫士

网络安全公司 Calif 发现,组合利用已存在37年之久的一个整数溢出漏洞与另一个独立的内核漏洞,可实现提权,在OpenBSD 7.9上获得root权限,绕过OpenBSD的KARL内核地址随机化及其SMAP和SMEP硬件保护。OpenBSD 在9月份予以修复。

shmat(4)附加函数中的整数溢出漏洞已在勘误018中修复,并于9月14日作为可靠性修复发布。完成攻击链的引用计数释放后使用问题则单独在勘误026中修复并于9月30日作为安全修复发布。两者均可通过syspatch获取,并覆盖所有架构。OpenBSD 7.8也获得了整数溢出修复方案。该整数溢出是完整攻击链的入口点,被归类为可靠性修复,而不是安全修复。

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

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

该漏洞利用映射127个共享内存段并派生259个进程,使计数器超过最大值并回绕到−32643。随后竞争条件触发释放后使用:被破坏的引用计数导致内核释放其它进程仍在使用的内存。

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

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

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

Calif表示其“今年早些时候”向OpenBSD报告了这些漏洞,并在GitHub平台发布了 PoC 利用代码。

代码卫士试用地址:https://sast.qianxin.com/

开源卫士试用地址:https://oss.qianxin.com/


原文链接

https://thehackernews.com/2026/10/researchers-demonstrate-openbsd-root.html

题图:Pixabay License

本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

   觉得不错,就点个 “在看” 或 "赞” 

阅读原文

跳转微信打开

本文转载自微信公众号「代码卫士」,查看原文。版权归原作者所有,如有侵权请联系删除。