关键词
Linux
在最近的分析中,安全研究员 Michael Hoefler 揭露了 CVE-2025-21756 的完整细节,这是一个影响 Linux 内核 vsock 子系统的释放后使用 (UAF) 漏洞。最初只是简单的代码调整——修改了几行 vsock_remove_sock() 的行为——最终阻止了一条通往本地特权提升 (LPE) 和内核代码执行的复杂路径。
“当内核中某个对象的引用计数器达到零时,该对象将被释放到其各自的内存管理器。理想情况下,在释放 vsock 对象后,我们将能够触发某种释放后使用 (UAF) 漏洞,以获得更好的原始权限并提升权限,”Hoefler解释道。
该漏洞源于传输重新分配期间对套接字绑定状态的处理不当。具体而言,vsock 代码错误地减少了已解除绑定套接字的引用计数器,导致 vsock 对象过早释放。
补丁分析指出: “传输重新分配可以触发 vsock_remove_sock,它会调用 vsock_remove_bound,从而错误地减少 vsock 对象上的引用计数器。”这引入了一种危险的 UAF 条件,攻击者可以利用该条件来获取强大的利用原语。
最初的利用尝试导致了内核崩溃,表明 AppArmor — 通过 Linux 安全模块 (LSM) 挂钩 — 在释放套接字时消除了 sk_security 指针,从而阻止了直接函数指针损坏。
Hoefler 强调说: “内核授予我们一个指向套接字的悬空指针 — — 但 AppArmor 确保我们在用它做任何有用的事情之前崩溃。”因此,攻击者必须找到不受 AppArmor 保护的内核函数才能继续利用。
为了绕过内核地址空间布局随机化 (kASLR) 而不依赖受 AppArmor 保护的函数,Hoefler 转向了 vsock_diag_dump() 功能,这是一个不受保护的 netlink 诊断工具。
通过使用精心设计的管道缓冲区回收释放的 vsock 套接字并利用 vsock_diag_dump 作为侧信道,Hoefler 暴力破解了有效的 skc_net 指针,从而绕过了 kASLR。
“我陷入了困境,于是求助于 kernelctf 社区,@h0mbre 建议使用 vsock_diag_dump 作为侧信道来暴力破解 skc_net 指针,”Hoefler 回忆道。这允许我通过已知的内存偏移量完全控制悬空套接字对象。
为了获得代码执行权限,Hoefler 利用了 vsock_release() 函数。由于该函数未受到 AppArmor 的保护,攻击可以劫持 sk->sk_prot->close 函数指针,并转向 ROP(面向返回编程)链:
“我们最感兴趣的是对 sk->sk_prot->close(sk, 0) 的调用。由于我们控制 sk,所以我们需要一个指向函数的有效指针,”他解释道。
最后的 ROP 链调用 commit_creds(init_cred),授予攻击者 root 权限并干净地将执行返回到用户空间。
来源:https://securityonline.info/cve-2025-21756-how-a-tiny-linux-kernel-bug-led-to-a-full-root-exploit-poc-releases/
END
原文始发于微信公众号(安全圈):【安全圈】CVE-2025-21756:Linux 内核漏洞如何导致完全 root 权限利用,PoC 发布
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论