
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 重温习近平总书记新疆之行 7904532
- 2 以总理胸口戴二维码 要求与会者扫码 7809007
- 3 别让“百亿补贴”补出“白色污染” 7714454
- 4 免费学前教育迈出第一步意味着什么 7619246
- 5 一学校招50个事业编年薪60万起 7520218
- 6 法院警车现身山姆:严格执纪、不苛责 7426448
- 7 净网:网警起底网络水军“生意经” 7331568
- 8 埃及失联的21岁中国女孩已找到 7238040
- 9 小米17破今年国产手机首销纪录 7143367
- 10 重庆两地发现上百株冥界之花 7045538