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:

  1. wermgr.exe分析report目录中所有文件并提交微软
  2. 检测到损坏的Report.wer INI文件时:
    • 先修改文件DACL(增加删除权限)
    • 然后删除文件

场景2详细流程:

  1. wermgr.exe -upload调用wermgr!DoCoreUpload函数
    • 列出ReportQueue下所有子目录
    • 读取并提交错误报告
  2. 发现损坏的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. 漏洞利用步骤

  1. 准备阶段

    • 在ReportQueue目录下创建恶意报告目录
    • 准备指向目标文件的硬链接
  2. 触发阶段

    • 等待或手动触发QueueReporting计划任务
    • wermgr.exe开始处理报告文件
  3. 竞态攻击

    • wermgr.exe读取DACL后立即创建硬链接
    • 使wermgr.exe误修改目标文件的安全描述符
  4. 权限提升

    • 修改系统关键文件(如DLL、EXE)权限
    • 替换文件内容为恶意payload
    • 等待系统或高权限进程执行被篡改文件

7. 防御措施

微软已于2019年5月发布补丁修复此漏洞,建议:

  1. 及时安装最新安全更新
  2. 监控对WER目录的异常访问
  3. 限制计划任务的执行权限
  4. 实施文件完整性监控

8. 参考资源

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) 攻击者可创建指向无权限访问文件的链接: 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函数分析 5.2 竞态条件利用 攻击者需要在 wermgr.exe 读取文件DACL和修改DACL之间的短暂窗口期创建链接 实际操作中需要多次尝试才能成功 6. 漏洞利用步骤 准备阶段 : 在ReportQueue目录下创建恶意报告目录 准备指向目标文件的硬链接 触发阶段 : 等待或手动触发QueueReporting计划任务 wermgr.exe 开始处理报告文件 竞态攻击 : 在 wermgr.exe 读取DACL后立即创建硬链接 使 wermgr.exe 误修改目标文件的安全描述符 权限提升 : 修改系统关键文件(如DLL、EXE)权限 替换文件内容为恶意payload 等待系统或高权限进程执行被篡改文件 7. 防御措施 微软已于2019年5月发布补丁修复此漏洞,建议: 及时安装最新安全更新 监控对WER目录的异常访问 限制计划任务的执行权限 实施文件完整性监控 8. 参考资源 微软安全公告 Palo Alto Networks分析报告