Windows 0day漏洞分析:从菜单UAF到系统提权

robot
摘要生成中

微软Windows系统0day漏洞分析及利用

引言

上月微软安全补丁中包含一个在野利用的win32k提权漏洞,仅存在于早期Windows系统。本文将分析在当前安全措施不断改进的情况下,攻击者如何继续利用该漏洞。分析环境为Windows Server 2016。

Numen 独家:微软 0day 漏洞可系统+物理层面掀掉 Web3 牌局

漏洞背景

0day漏洞指未被披露和修补的漏洞,可被恶意利用造成极大破坏。本次发现的Windows系统0day漏洞可使黑客获取系统完全控制权,后果包括但不限于:

  • 个人信息窃取
  • 系统崩溃数据丢失
  • 财务损失
  • 恶意软件植入
  • 加密私钥被窃取
  • 数字资产被转移

从更大范围看,该漏洞可能影响基于Web2基础设施运行的整个Web3生态。

Numen 独家:微软 0day 漏洞可系统+物理层面掀掉 Web3 牌局

补丁分析

补丁修复了一处对象引用计数的多次处理问题。分析早期源码注释发现,原代码只锁定了窗口对象,未锁定窗口中的菜单对象,可能导致菜单对象被错误引用。

Numen 独家:微软 0day 漏洞可系统+物理层面掀掉 Web3 牌局

漏洞利用分析

分析发现xxxEnableMenuItem函数中,MenuItemState函数返回的菜单有两种可能:窗口主菜单或菜单中的子菜单。

构造特殊的多层嵌套菜单结构,并设置特定属性,可绕过函数检测。在xxxRedrawTitle函数返回用户层时,删除菜单间引用关系并释放目标菜单对象。最终在xxxEnableMenuItem函数中引用到已无效的菜单对象。

Numen 独家:微软 0day 漏洞可系统+物理层面掀掉 Web3 牌局

漏洞利用实现

整体思路

考虑两种利用方向:

  1. 执行shellcode代码
  2. 利用读写原语修改token地址

选择第二种方案,将利用过程拆分为两个问题:

  • 如何利用UAF漏洞控制cbwndextra值
  • 如何实现稳定的读写原语

Numen 独家:微软 0day 漏洞可系统+物理层面掀掉 Web3 牌局

初始数据写入

利用窗口类WNDClass中的窗口名称对象占用释放的菜单对象。在xxxRedrawWindow函数中找到可写入数据的时机。

最终选择通过标志位AND 2操作写入HWNDClass的cb-extra参数。

Numen 独家:微软 0day 漏洞可系统+物理层面掀掉 Web3 牌局

稳定内存布局

设计连续三个HWND对象,释放中间对象并用HWNDClass对象占用。前后HWND对象分别用于:

  • 提供标志检验参数
  • 提供读写原语媒介

通过泄露的内核句柄地址精确判断对象排列顺序。

Numen 独家:微软 0day 漏洞可系统+物理层面掀掉 Web3 牌局

读写原语实现

  • 任意读:GetMenuBarInfo()
  • 任意写:SetClassLongPtr()

除TOKEN写入外,其他写入操作利用第一个窗口对象的class对象。

总结

  1. win32k漏洞在新版Windows中可能被杜绝

  2. 漏洞利用过程相对简单,主要依赖桌面堆句柄地址泄露

  3. 漏洞发现可能依赖更完善的代码覆盖率检测

  4. 对异常内存读写的检测有助于发现同类漏洞

Numen 独家:微软 0day 漏洞可系统+物理层面掀掉 Web3 牌局

TOKEN4.05%
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 3
  • 转发
  • 分享
评论
0/400
午夜交易者vip
· 17小时前
又一个大洞 Windows真不行啊
回复0
TokenDustCollectorvip
· 18小时前
微软这漏洞有点刑啊 私钥都能给偷了
回复0
半仓就是空仓vip
· 18小时前
哎呦 又翻车啦~
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)