
CVE-2024-30088:Windows内核权限提升漏洞解析
声明:该文章由作者(拇指兔)发表,转载此文章须经作者同意并请附上出处(0XUCN)及本页链接。。
在最近的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 凝聚发展梦想 引领世代友好 7904127
- 2 那尔那茜涉嫌高考报名材料造假 7808227
- 3 常州0-4南京 7712807
- 4 从5月份数据看消费市场新亮点 7617615
- 5 那尔那茜高考文化课449分 7520529
- 6 南京这次成真“南哥”了 7429194
- 7 63岁马景涛直播时晕倒 7333432
- 8 食堂阿姨脱稿演讲听哭毕业生 7234714
- 9 汪峰牵手宁静 森林北评论区沦陷 7137156
- 10 网友拍下张家界洪水画面 7042558