CVE-2024-30088:Windows内核权限提升漏洞解析
在最近的Windows安全补丁中,CVE-2024-30088是一个引起广泛关注的安全漏洞。这个漏洞存在于Windows内核函数AuthzBasepCopyoutInternalSecurityAttributes中,涉及到内核在将_AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION结构从内核对象的当前令牌复制到用户模式时的安全隐患。
漏洞结构解析
该结构的定义如下:
//0x30 bytes (sizeof)struct _AUTHZBASEP_SECURITY_ATTRIBUTES_INFORMATION { ULONG SecurityAttributeCount; //0x0 struct _LIST_ENTRY SecurityAttributesList; //0x8 ULONG WorkingSecurityAttributeCount; //0x18 struct _LIST_ENTRY WorkingSecurityAttributesList; //0x20};
在执行到复制SecurityAttributesList列表时,内核直接将SecurityAttribute的结构列表指向用户提供的指针。此后,它调用RtlCopyUnicodeString和AuthzBasepCopyoutInternalSecurityAttributeValues函数来复制安全属性结构的名称和值,导致该函数中存在多个时间竞争问题(TOCTOU)。
通过在RtlCopyUnicodeString调用前用竞争线程修改属性名称的Buffer指针,攻击者可以轻易地实现对任意地址的写操作,且可控制写入的值和大小。
漏洞触发机制
此漏洞可通过调用NtQueryInformationToken函数,并指定TokenAccesInformation类来触发。
补丁分析
为了解决这一问题,补丁在内核栈上使用局部变量(在代码中为v18)作为缓冲区,先将安全属性的名称复制到该缓冲区,然后再写回用户缓冲区。这种改进显著提高了系统的安全性,防止了通过用户模式调用系统调用时的潜在危险。
...*(_QWORD *)&v18.Length = 0i64;v18.MaximumLength = Flink_low;v18.Buffer = v17;RtlCopyUnicodeString(&v18.Length, (unsigned __int16 *)&Flink[2]);*(_UNICODE_STRING *)(v13 - 0x48) = v18;...
在调试会话中,我们可以看到经过补丁后,rcx寄存器是内核地址:
5: kd> nt!AuthzBasepCopyoutInternalSecurityAttributes+0x1aa:fffff803`5dbcf14a e8810fa5ff call nt!RtlCopyUnicodeString (fffff803`5d6200d0)
演示代码和实验
对于想深入了解该漏洞如何被利用的研究者和安全专家,可以参考这个演示视频链接:漏洞利用演示。
[超站]友情链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
随时掌握互联网精彩
- 1 大国来信 友谊之桥 7978254
- 2 日本特大地震警告:概率升至80% 7926486
- 3 杨子直播求婚黄圣依 7872597
- 4 春运高铁上空的守护者 7707862
- 5 郭德纲认证郭麒麟为德云社继承人 7694439
- 6 留几手 十年网红白干了 7509751
- 7 女孩零下二十多度穿公主鞋上街 7493053
- 8 刘晓庆不语只是一味贴假睫毛 7335619
- 9 广东都快干成厂东了 7276138
- 10 金晨头顶海胆跳起了抽象舞 7129014