CVE-2019-0863漏洞分析
字数 1444 2025-08-27 12:33:31
CVE-2019-0863漏洞分析与利用教学文档
1. 漏洞概述
CVE-2019-0863是Windows Error Reporting (WER)组件中的一个权限提升漏洞,最初由黑客SandboxEscaper在2018年12月公布。该漏洞允许攻击者通过滥用文件系统链接技术,修改任意文件的权限,最终实现权限提升。
2. Windows Error Reporting (WER)组件介绍
Windows Error Reporting是微软提供的一个错误报告基础设施,主要功能包括:
- 收集软硬件问题信息
- 将错误报告发送给微软
- 提供解决方案
错误报告存储在:C:\ProgramData\Microsoft\Windows\WER\ReportQueue
- 每个报告有自己的子目录
- 包含一个唯一的Report.wer INI文件和相关元数据
- 关键点:所有用户对ReportQueue目录都有写权限
3. 漏洞相关组件
3.1 QueueReporting计划任务
- 以System权限运行
- 按需触发
- 执行命令:
wermgr.exe -upload
3.2 wermgr.exe功能
- 处理暂停的报告文件和目录
- 读取、分析并复制文件
- 删除损坏的报告
4. 漏洞原理
4.1 文件系统链接滥用
Windows支持多种文件系统链接类型,漏洞主要利用:
- 硬链接(Hard Links)
- 挂载点(Mount Points)
攻击者可创建指向无权限访问文件的链接:
例:将c:\temp\Dir\x.dll链接到C:\Windows\System32\kernel32.dll
4.2 漏洞触发流程
场景1:
wermgr.exe分析report目录中所有文件并提交微软- 检测到损坏的Report.wer INI文件时:
- 先修改文件DACL(增加删除权限)
- 然后删除文件
场景2详细流程:
wermgr.exe -upload调用wermgr!DoCoreUpload函数- 列出ReportQueue下所有子目录
- 读取并提交错误报告
- 发现损坏的Report.wer INI文件时:
wermgr!DeleteCorruptedReportFromStore列出子目录文件wermgr!PreparePathForDeletion修改每个文件权限:- 使用
GetFileSecurity读取安全描述符 - 使用
SetFileSecurity应用删除文件描述符
- 使用
5. 漏洞利用技术细节
5.1 PreparePathForDeletion函数分析
int64 PreparePathForDeletion(wchar_t* FileName) {
PSECURITY_DESCRIPTOR SecurityDescriptor = NULL;
DWORD BytesRead = 0;
PDACL Dacl = NULL;
// 获取文件安全描述符
if (!GetFileSecurity(FileName, DACL_SECURITY_INFORMATION, NULL, 0, &BytesRead))
return;
SecurityDescriptor = new BYTE[BytesRead];
if (!GetFileSecurity(FileName, DACL_SECURITY_INFORMATION, SecurityDescriptor, BytesRead, &BytesRead))
return;
// 获取DACL信息
if (GetSecurityDescriptorDacl(SecurityDescriptor, &DaclPresent, &Dacl, &DaclDefaulted)) {
HANDLE TokenHandle = NULL;
PACL NewAcl = NULL;
EXPLICIT_ACCESS ExplicitAccess = {0};
// 获取当前用户信息
LPVOID UserName = new BYTE[GetTokenInformation(TokenHandle, TokenUser, UserName, &BytesRead)];
// 设置新的访问权限
ExplicitAccess.Trustee.ptstrName = UserName;
ExplicitAccess.Trustee.TrusteeType = TRUSTEE_IS_NAME;
ExplicitAccess.grfAccessMode = GRANT_ACCESS;
ExplicitAccess.grfAccessPermissions = DELETE;
// 创建新ACL
SetEntriesInAcl(1, &ExplicitAccess, Dacl, &NewAcl);
// 初始化安全描述符并设置新DACL
InitializeSecurityDescriptor(&SecurityDescriptor, 1);
SetSecurityDescriptorDacl(&SecurityDescriptor, 1, NewAcl, 0);
// 应用新的安全描述符
SetFileSecurity(FilePath, DACL_SECURITY_INFORMATION, &SecurityDescriptor);
}
}
5.2 竞态条件利用
- 攻击者需要在
wermgr.exe读取文件DACL和修改DACL之间的短暂窗口期创建链接 - 实际操作中需要多次尝试才能成功
6. 漏洞利用步骤
-
准备阶段:
- 在ReportQueue目录下创建恶意报告目录
- 准备指向目标文件的硬链接
-
触发阶段:
- 等待或手动触发QueueReporting计划任务
wermgr.exe开始处理报告文件
-
竞态攻击:
- 在
wermgr.exe读取DACL后立即创建硬链接 - 使
wermgr.exe误修改目标文件的安全描述符
- 在
-
权限提升:
- 修改系统关键文件(如DLL、EXE)权限
- 替换文件内容为恶意payload
- 等待系统或高权限进程执行被篡改文件
7. 防御措施
微软已于2019年5月发布补丁修复此漏洞,建议:
- 及时安装最新安全更新
- 监控对WER目录的异常访问
- 限制计划任务的执行权限
- 实施文件完整性监控