
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 习近平总书记为“她”点赞 7903955
- 2 为什么贷款骚扰电话突然变少了 7808211
- 3 巴基斯坦军方:200余人在冲突中丧生 7714172
- 4 我们离“人造太阳”有多远 7616241
- 5 机票价格大跳水 7523747
- 6 本科生“回炉”上技校越来越香了 7428295
- 7 每3度电就有1度是绿电 7329677
- 8 浙江23岁外卖小哥蹊跷失踪22天 7237130
- 9 景区:趵突泉下没水泵但确有水管 7143423
- 10 英国摇滚乐团前主唱狱中被杀 7041658