POC公布:Windows驱动程序暴整数溢出漏洞可致权限提升

admin 2024年12月3日13:31:20评论15 views字数 2962阅读9分52秒阅读模式

一名独立研究员近期发现了Windows操作系统中ksthunk.sys驱动程序的严重漏洞,该驱动程序负责32位与64位进程间的通信,此漏洞允许攻击者通过整数溢出实现权限提升。该研究员近日在TyphoonPWN 2024大赛中演示了该漏洞的利用,斩获大赛第二名。

该漏洞存在于

CKSAutomationThunk::ThunkEnableEventIrp函数中,该函数用于在内核中分配缓冲区以处理输入和输出数据。然而,由于在缓冲区大小对齐计算时缺乏整数溢出的验证,导致分配的缓冲区尺寸不正确,进而触发堆内存溢出。

POC公布:Windows驱动程序暴整数溢出漏洞可致权限提升

漏洞代码关键点如下:

// Only Called when the calling process is 32bit.__int64 __fastcall CKSAutomationThunk::ThunkEnableEventIrp(__int64 a1, PIRP a2, __int64 a3, int * a4) {        ...        inbuflen = CurrentStackLocation -> Parameters.DeviceIoControl.InputBufferLength;        outbuflen = CurrentStackLocation -> Parameters.DeviceIoControl.OutputBufferLength;        // [1]. Align the length of output buffer        outlen_adjust = (outbuflen + 0x17) & 0xFFFFFFF8;        if (a2 -> AssociatedIrp.MasterIrp)            return 1 i64;        if ((unsigned int) inbuflen < 0x18)            ExRaiseStatus(-1073741306);        ProbeForRead(CurrentStackLocation -> Parameters.DeviceIoControl.Type3InputBuffer, inbuflen, 1 u);        if (( * ((_DWORD * ) CurrentStackLocation -> Parameters.DeviceIoControl.Type3InputBuffer + 5) & 0xEFFFFFFF) == 1 ||            ( * ((_DWORD * ) CurrentStackLocation -> Parameters.DeviceIoControl.Type3InputBuffer + 5) & 0xEFFFFFFF) == 2 ||            ( * ((_DWORD * ) CurrentStackLocation -> Parameters.DeviceIoControl.Type3InputBuffer + 5) & 0xEFFFFFFF) == 4) {            // [2]. Validate the Length            if ((unsigned int) outbuflen < 0x10)                ExRaiseStatus(-1073741306);            if (outlen_adjust < (int) outbuflen + 16 || outlen_adjust + (unsigned int) inbuflen < outlen_adjust)                ExRaiseStatus(-1073741306);            // [3]. Allocate the buffer to store the data            // 0x61 == POOL_FLAG_USE_QUOTA | POOL_FLAG_RAISE_ON_FAILURE POOL_FLAG_NON_PAGED            a2 -> AssociatedIrp.MasterIrp = (struct _IRP * ) ExAllocatePool2(                0x61 i64,                outlen_adjust + (unsigned int) inbuflen,                1886409547 i64);            a2 -> Flags |= 0x30 u;            ProbeForRead(a2 -> UserBuffer, outbuflen, 1 u); // [*]             data = (__int64) a2 -> AssociatedIrp.MasterIrp;            ...            // [4]. Copy the Data            if ((unsigned int) outbuflen > 0x10)                memmove((void * )(data + 0x20), (char * ) a2 -> UserBuffer + 16, outbuflen - 16);            memmove(                (char * ) a2 -> AssociatedIrp.MasterIrp + outlen_adjust,                CurrentStackLocation -> Parameters.FileSystemControl.Type3InputBuffer,                inbuflen);            ...        }

SSD Secure Disclosure技术团队指出:

在代码片段[1]处,outlen_adjust的计算缺乏整数溢出验证,这可能导致分配过小的缓冲区。

在[4]处,当数据被复制到不正确的内存位置时,会触发堆内存溢出,最终导致内核内存损坏并允许进一步利用。

研究员展示了一种详细的利用方法,通过以下步骤实现权限提升:

内存操控:在内核非分页池中创建间隔,以便利用溢出攻击命名管道对象。

任意内存访问:通过破坏邻近内存对象(如命名管道),获取任意读写权限。

令牌覆盖:修改当前进程的令牌,将权限提升为SYSTEM,从而完全控制目标机器。

微软已收到该漏洞的通知,但回应称这是一个已经被修复的重复问题。然而,研究员在Windows 11 23H2中发现漏洞仍可利用。至今,微软尚未分配CVE编号,也未提供详细的修复信息。

内核级漏洞的存在为高级威胁行为者提供了便捷的攻击途径。该漏洞通过对分配缓冲区大小的精确操控,加上容易利用的内存破坏特性,攻击难度相对较低,适合作为后续攻击链中的关键环节。

专家建议,开发者在内核代码中应严格执行整数溢出的验证,特别是在内存分配和使用时,确保分配大小的安全性。系统管理员则需限制驱动访问,仅允许经过验证的驱动加载,以减少潜在的攻击面。此外,企业和个人用户应部署安全工具实时监控内核异常行为,并及时应用系统更新和补丁,以最大程度降低漏洞被利用的风险。面对权限提升漏洞的威胁,这些防护措施将是保护系统安全的关键环节。

更多技术细节及漏洞利用的PoC代码可参见SSD Secure Disclosure的官方公告。

文章参考:

https://securityonline.info/integer-overflow-vulnerability-in-windows-driver-enables-privilege-escalation-poc-published/

推荐阅读

01

星巴克遭供应链攻击被迫回归纸笔时代

02

财富1000强企业的API暴露风险与漏洞挑战

03

合法安全驱动程序武器化

安全KER

安全KER致力于搭建国内安全人才学习、工具、淘金、资讯一体化开放平台,推动数字安全社区文化的普及推广与人才生态的链接融合。目前,安全KER已整合全国数千位白帽资源,联合南京、北京、广州、深圳、长沙、上海、郑州等十余座城市,与ISC、XCon、看雪SDC、Hacking Group等数个中大型品牌达成合作。

POC公布:Windows驱动程序暴整数溢出漏洞可致权限提升
POC公布:Windows驱动程序暴整数溢出漏洞可致权限提升

注册安全KER社区

链接最新“圈子”动态

原文始发于微信公众号(安全客):POC公布:Windows驱动程序暴整数溢出漏洞可致权限提升

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月3日13:31:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   POC公布:Windows驱动程序暴整数溢出漏洞可致权限提升http://cn-sec.com/archives/3451344.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息