查看原文
其他

戴尔修复预装工具 SupportAssist 中的本地权限提升漏洞

Ionut Arghire 代码卫士 2022-05-23

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

翻译:360代码卫士团队


近期,戴尔修复了 SupportAssist 工具中的一个本地权限提升漏洞。该工具预装在多数 Windows 系统戴尔设备上。

发现这个安全问题的研究员 Bryan Alexander 指出,这个本地权限提升漏洞存在于工具所加载的一个内核驱动中。该工具主要用于解决问题并向用户和戴尔提供支持。

Alexander 指出,该漏洞可被用于绕过驱动强制签名 (DSE) ad.infinitum。该驱动暴露了很多功能,“为读写模型相关寄存器 (MSR)、重置1394总线和读/写 CMOS 提供能力。”

SupportAssist 启动时(根据不同架构,文件名为 pcdsrvc_x64.pkms 或pcdsrvc.pkms),受影响驱动被首次加载。尽管供戴尔使用,该驱动由向电脑厂商如戴尔、英特尔、横河等提供“系统健康解决方案”的 PC-Doctor 公司构建。

研究人员解释称,“驱动加载后,它将系统链接暴露到非权限用户可在系统上写入的位于 PCDSRVC{3B54B31B-D06B6431-06020200}_0的设备。这就可让我们触发遭驱动暴露的其中一个 IOCTLs;很可能共有30个 IOCTLs。”

Alexander 还发现 userland 代理使用的一个 DLL也可当做内核驱动的接口并具有符号名。进一步分析表明,类 MemDriver 可允许 userland 服务读写任意物理地址。

然而,要实现上述目的,驱动必须被“解锁”开启处理控制代码。要解锁,攻击者只需发送包含正确代码的系统调用 (ioctl)。然后,驱动设置一个全局标记并且“为系统的生命周期处理控制代码”。

要利用这个问题,攻击者可开始读取物理内存寻找进程池标记,然后识别目标进程和 SYSTEM 进程,接着窃取令牌。

研究人员表示,“然而,PCD 似乎经由 getPhysicalAddress ioctl 提供了一个捷径。如果它确实返回既定虚拟地址的物理地址,那我们只需找到虚拟地址的物理地址并通过 writePhysicalMemory ioctl 启用一两个令牌权限即可。”

不管怎样,这个问题意味着只有用户模式地址才能如此解析,因为 MmProbeAndLockPages 调用以 UserMode为 KPROCESSOR_MODE 传递。

即便如此,仍然可以读取物理内存块,研究人员借此切换 SeDebugPrivilege 以获取当前进程令牌(这需要“在内存中查找令牌并在字段偏移处写入几个字节”)。

找到令牌的物理地址后,研究人员在 _TOKEN 的启用和默认字段中触发两个单独的写入。研究人员已在 GitHub 上发布了这个 bug 的源代码。

研究人员在4月初就将问题告知戴尔,不过后者在上周才推出 SupportAssist 的补丁版本。



关联阅读

英特尔戴尔惠普纷纷叫停 CPU 补丁 Linux 之父怒斥 Linux 幽灵补丁是“彻底的垃圾”


原文链接

https://www.securityweek.com/dell-patches-vulnerability-pre-installed-supportassist-utility


本文由360代码卫士编译,不代表360观点,转载请注明 “转自360代码卫士www.codesafe.cn”。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存