导语:一个系统调用,12字节写入,从浏览器沙箱直接拿到SYSTEM——这不是理论攻击,而是已经发生的技术现实。CVE-2026-40369击穿了Windows内核的最后一道防线,完整PoC在GitHub上任何人随手可得。沙箱?在我眼里从来不是障碍。
一、漏洞概述:一条被忽视的系统调用路径
CVE-2026-40369(CVSS 7.8,重要级别,”被利用可能性更高”)是Windows内核ntoskrnl.exe中的一个逻辑缺陷,位于ExpGetProcessInformation函数。问题的根源看似简单:向NtQuerySystemInformation发送信息类为253(SystemProcessInformationExtension)的请求时,如果将缓冲区长度设为0,内核的ProbeForWrite验证将完全被绕过——长度为零时,整个ProbeForWrite函数体被if (Length)直接跳过,连地址校验都没机会执行。
这意味着攻击者可以指定任意内核虚拟地址作为写入目标,受限的渲染进程沙箱对此毫无拦截。Chrome的渲染进程沙箱恰好允许调用NtQuerySystemInformation——这个syscall既不受Win32k lockdown限制,也不受完整性级别(Integrity Level)约束。用红队的行话说,这就是一个沙箱等效于不存在的漏洞。

二、漏洞技术细节:12字节如何换SYSTEM权限
2.1 核心原语:任意内核DWORD递增
单次触发NtQuerySystemInformation(253, kernelAddr, 0, &needed),内核会在攻击者指定的内核地址上依次执行三次DWORD写入:
// ExpGetProcessInformation,信息类253路径
unsigned int *v99 = (unsigned int *)a1; // 直接取用户传入的指针,无任何校验
// 遍历系统所有进程,对每个进程执行:
++*v99; // [target+0] += 系统进程总数
v99[1] += threadCnt; // [target+4] += 所有进程线程数之和
v99[2] += handleCnt; // [target+8] += 所有进程句柄数之和
目标地址不需要4字节对齐,三次写入可以跨越相邻结构体字段。增量值虽然是系统状态的函数(进程数、线程数、句柄数),但通过多次触发可以制造随机游走效应,逐步将特定内核结构体的特定位”推”到想要的状态。这不是直接赋值,而是用inc/add逐位逼近——攻击者没有精确控制,但有足够的随机性和重复次数来碰运气。
2.2 多层防御为何全部失效
这个漏洞最可怕的地方在于,几乎所有内核防护机制都对它无效:
ProbeForWrite:长度为零时函数直接返回,完全不执行地址范围校验。
SeAccessCheck:只检查访问权限,不阻止写入操作本身。
长度校验:虽然设置了STATUS_INFO_LENGTH_MISMATCH状态,但函数不返回,继续执行写入循环。
SMAP(Supervisor Mode Access Prevention):Windows并不强制启用SMAP,内核可以自由访问用户态内存。
HVCI/KPP(Hyper Visor Code Integrity/Kernel Patch Protection):保护代码页和选定的结构体,但大多数可写内核数据不在保护范围内。
换句话说,这不是绕过某一层防御的技巧性漏洞,而是Windows内核在信息类253这个特定路径上的架构性缺陷——整个信任链在Length=0时集体断电。
三、利用路径:从12字节原语到SYSTEM shell
VoidSec研究员的完整利用链展示了如何将这个”鸡肋”的写入原语转化为真正的提权工具,全过程分五个阶段:
第一阶段:KASLR破解
获取内核基地址,为后续操作铺路。
第二阶段:关闭Feature_RestrictKernelAddressLeaks门控
这是最精妙的步骤。NtQuerySystemInformation中一些信息类(比如类64,返回内核对象指针)在默认状态下被该特性 gate 住,返回零值。通过向特定 WIL(Windows Implementation Library)特性状态缓存地址写入特定值,可以关闭这个门控,激活内核指针泄露功能。
原始启动值为0x57(缓存+启用+trial标志),关闭需要满足(0x57 + N) & 0x11 == 0x10,最小的N≥185。攻击者通过反复触发漏洞配合短生命周期子进程,最终将门控拉下来。
第三阶段:泄露_TOKEN内核地址
门控关闭后,调用SystemExtendedHandleInformation(类64)即可获取系统句柄表,从中定位当前进程的_TOKEN内核虚拟地址。
第四阶段:权限位提升
研究者选择SeCreateTokenPrivilege而非传统的SeDebugPrivilege路径。通过反复触发漏洞,每次读取TokenPrivileges状态并解码位字段,逐步将SeCreateTokenPrivilege、SeTcbPrivilege、SeImpersonatePrivilege等关键权限位推到启用状态。

由于inc/add会产生进位传播,每轮写入的效果不可精确预测,但足够多的尝试总能让目标位落地。
第五阶段:生成SYSTEM shell
权限到位后,调用NtCreateToken从零伪造一个SYSTEM主令牌,再用CreateProcessWithTokenW以该令牌启动cmd.exe,shell直接以NT AUTHORITYSYSTEM身份运行。
整个链完全确定性(100%可靠),无需race condition,无需堆喷射。
四、影响范围:国内政企终端重灾区
受影响的版本:
|
|
|
|---|---|
|
|
|
|
|
受影响 |
|
|
受影响 |
微软已于2026年5月补丁日(5月12日)修复此漏洞,CVSS评分7.8,列为”重要”级别且标注”被利用可能性更高”。但需要注意的是,企业环境的补丁部署往往滞后数周甚至数月,而国内政企大量采用Windows 11 24H2/25H2系统,其中不少还在使用Chrome或Edge作为主力浏览器——这正是这条攻击链的完美入口。
典型攻击场景:
-
攻击者通过钓鱼邮件或水坑攻击,在目标浏览器中植入JavaScript漏洞利用代码 -
从浏览器渲染进程沙箱内部调用 NtQuerySystemInformation(253, kernelAddr, 0, &ret) -
绕过沙箱,直接获得内核任意地址写入能力 -
提权至SYSTEM,植入后门或窃取敏感数据
整个过程用户无感知,无弹窗,从沙箱进程到系统最高权限全程静默。
五、检测与防御建议
5.1 终端检测
监测以下Sysmon事件组合:
-
Event 10(ProcessAccess):低权限进程通过NtQuerySystemInformation访问高权限进程 -
Event 13/14(Registry):内核态特征缓存被异常修改 -
高频调用 NtQuerySystemInformation且返回长度为12的syscall(可关联进程数量变化)
5.2 缓解措施
-
立即打补丁:部署微软2026年5月补丁日更新(KB5089593及相关补丁) -
限制浏览器渲染进程权限:Chrome可启用Hardware-enforced Stack Protection;Edge可配置Windows Defender Application Guard -
启用HVCI(Hypervisor-protected Code Integrity):虽然不能完全阻止此漏洞,但能增加利用难度 -
监控内核态异常写入:部署EDR规则,检测进程对内核内存的异常写入行为 -
最小化原则:浏览器以外的其他应用尽量避免以High IL运行,减少横向移动路径
六、总结
CVE-2026-40369再次证明,沙箱从来不是安全的边界——它只是给攻击者增加了一点乐趣。12字节的内核写入原语,一个被所有防御层忽视的syscall路径,加上100%确定性的利用链,这让任何拥有浏览器代码执行能力的攻击者都能在几分钟内拿到系统最高权限。
对于国内政企来说,这场攻防战争的核心战场不在代码层面,而在补丁部署速度。微软已经给出修复方案,现在比武器化更快的,是那些还在等待IT部门排期打补丁的终端。
版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。
PoC 下载链接
完整漏洞利用代码(GitHub):https://github.com/orinimron123/CVE-2026-40369-EXPLOIT
⚠️ 声明:本链接仅供安全研究人员学习交流使用,请勿用于任何非法用途。利用该漏洞攻击他人系统属违法行为,将依法追究法律责任。
👇 点击阅读原文,访问我的网站


























暂无评论内容