Watch at Ease看见世界,读懂生活。

科技 · 新闻解读

OpenBSD“Big Fish”可本地提权至 root,但补丁早已提供

Calif 于 10 月 16 日公开了可用的 OpenBSD 7.9 本地提权链。它把数十年前的共享内存计数器溢出与其他内核缺陷串联;OpenBSD 已在 9 月发布相关修复。

展示本地用户、共享内存计数器溢出、内存破坏与 root shell 的原创图。
原创插画:公开链条是本地提权,不是无需前置条件的远程入口。 Watch at Ease

安全公司 Calif 于 10 月 16 日发布完整 PoC,演示如何在 OpenBSD 7.9 上从本地低权限用户提权到 root。链条首先让一个有符号 16 位共享内存附加计数器溢出,再把竞态触发的释放后使用与另一个越界写入组合起来。

风险很真实,但边界同样重要:攻击者必须先能以本地用户身份运行代码。公开材料没有演示无需认证的远程入侵。OpenBSD 早在 PoC 公开前,就于 9 月 14 日发布勘误 018、9 月 30 日发布勘误 026。

公开利用证明了什么

Calif 称,利用会映射 127 个 System V 共享内存段并派生 259 个进程,使附加计数器越过有符号 16 位上限;随后通过竞态把错误计数变成释放后使用。

链条再利用堆布局操控与单独的越界写入修改页表状态,并覆盖可预测的内核函数指针。研究者在 KARL、SMAP 与 SMEP 开启且没有信息泄露缺陷的情况下取得 root shell。

它没有证明什么

这是本地提权。公开路径假定攻击者已经能在目标机上以低权限用户运行代码;它本身不提供面向网络或无需认证的入口。

独立报道发布时,没有 CVE,也没有在野攻击证据。这只是当时状态,不能证明公开代码出现后永远不会被利用。

修复早于 PoC

OpenBSD 7.9 的勘误 018 日期为 9 月 14 日,用于防止 shmat(4) 整数溢出;勘误 026 日期为 9 月 30 日,修复可能导致释放后使用的内核引用计数缺陷。官方条目均覆盖所有架构的源码修复。

勘误页说明 amd64、i386 与 arm64 可通过 syspatch 获取二进制更新;其他架构可能需要源码与 -stable 分支路径。OpenBSD 7.8 也在勘误 054 中获得共享内存溢出修复。

管理员怎样核验

在受支持的官方 OpenBSD 版本上,不带选项运行 syspatch 会获取、验证并安装所有缺失的二进制补丁;补丁是累积式,不能只挑一部分。-c 可列出可用补丁,-l 可列出已安装补丁。

不要只看系统版本号就推断已受保护。应核对已安装补丁、阅读命令输出,并遵循补丁给出的重启提示。若版本不受支持,或架构没有所需二进制更新,应使用项目签名源码补丁与受支持的 -stable 指引。

为什么补丁之后研究仍重要

37 年前的计数器类型只是入口。完整利用还依赖确定性的内核分配与另一个内存破坏原语。Calif 建议采用安全链表摘除、页表映射随机化、分配器随机化和编译器边界检查。

对读者而言,结论应保持克制:工作利用已经公开,补丁核查很紧迫;但不能把它写成远程接管 OpenBSD,也不能声称已有活跃攻击。

展示 9 月两项修复早于 10 月 16 日 PoC 的原创时间线。
原创插画:管理员应通过 syspatch 核对缺失补丁,并遵循输出中的重启提示。 Watch at Ease