CVE-2019-0863破绽剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

CVE-2019-0863破绽剖析

申博_安全预警 申博 110次浏览 未收录 0个评论

2018年12月,黑客SandboxEscaper宣布了Windows Error Reporting (WER)组件的一个0 day破绽。经由剖析,研究人员发明了别的一个破绽能够配合该破绽来举行权限提拔。依据微软宣布的通告,在2019年5月宣布补丁前,该破绽都是0 day破绽。那末该破绽是怎样事情的呢?

Microsoft WER

Windows Error Reporting 东西是一个天真的基于事宜的反应基础设施,用来网络关于软硬件的题目,然后将信息报告给微软,然后微软供应对应的解决方案。
比方,假如Windows体系奔溃了,那末就会天生毛病报告,并保存在WER报告行列目次C:\ProgramData\Microsoft\Windows\WER\ReportQueue中,每一个报告都邑有本身的子目次和有相关元数据的唯一的Report.wer INI文件。为了让一切历程都报告毛病状况,一切用户都有ReportQueue目次的写权限,如下图所示:

CVE-2019-0863破绽剖析

图1. Windows Error Reporting queue目次
报告天生后,就会发送给微软举行下一步剖析。这类交互有很多种触发体式格局,个中一种体式格局就是运用Windows Error Reporting\QueueReporting计划使命。从平安的角度来剖析,该使命很有意义,由于:

  • 它是以System权限运转的
  • 能够在须要时触发
  • 用牢固的命令行参数wermgr.exe -upload来运转特定的二进制代码。

CVE-2019-0863破绽剖析

图2. Windows Error Reporting计划使命
实行后,wermgr.exe 会与停息的报告文件和目次举行交互。读取文件、剖析并复制到其他目次中,以至会删除。由于任何用户都有写权限,假如不注意,就会发生一些平安破绽。

滥用文件体系链接

Windows体系支撑差别范例的文件体系链接,文件体系链接能够将文件和目次指向其他目的文件和目次。一旦链接被扫描或重剖析后,就会将用户重定向到目的途径。从平安的角度来看,最大的平安要挟来源于滥用硬链接和挂载点,由于用户能够链接到原本没有写权限的文件或目次。

下面的例子诠释了对kernel32.dll没有写权限的用户能够在c:\temp\Dir\x.dllC:\Windows\System32\kernel32.dll之间建立一个链接。假如能够重定向到更高权限的组件,黑客就能够去读、写、以至删除敏感和主要的文件。

CVE-2019-0863破绽剖析

Mozilla火狐浏览器中的一个Use-After-Free漏洞分析

Mozilla 在2018年12月通过mfsa2018-29发布了火狐浏览器64位的新版本,该版本修复了几个严重的安全问题,其中包括 CVE-2018-18492,这个CVE是和select元素相关的一个use-after-free(UAF)漏洞。我们之前讨论过UAF这种漏洞,并且我们可以看到厂商已经实现全面的保护以尝试消除它们。但即使在今天,在web浏览器中发现和UAF相关的漏洞也不是太罕见,所以了解这些漏洞对于发现和修复这些错误是十分重要的。这篇博客主要展现了这个CVE中UAF漏洞的更多细节,以及为了解决这个漏洞而发布的补丁。 漏洞触发 以下一段poc代码可以

图3. 建立到用户本没有写权限的文件的硬链接

PoC

简而言之,黑客能够运用WER的才来修正文件权限来对恣意文件分派读、写、编辑和删除权限,详细来说就是运用前面提到的文件体系链接手艺将report目次中的文件链接到盘算机上的其他目的文件。
下面引见一个完整的bug运用场景。

场景1:

Step 1: wermger.exe剖析report目次中的一切文件,并提交给微软:

int64 DoCoreUpload(/* ... */) {
    /* ... */
    Ret = WerpSubmitReportFromStore(ReportPath, /* ... */);
    if (Ret >= 0) {
        /* Report successfully uploaded */
    } else {
        if (Ret == ERROR_FILE_CORRUPT) {
            DeleteCorruptedReportFromStore(ReportPath);
        }
    }
}

Step 2: 当 wermger.exe检测到破坏的Report.werINI文件,最终会删除它,但起首它要增添历程实行权限修正文件的DACL特性才删除该文件。
破绽运用:黑客运用wermger.exe读取文件DACL权限的这个小的窗口期,来增添对该文件的删除权限。假如进击者建立了该文件与体系中其他文件的链接,DACL读取后,wermgr.exe就会毛病地修正其他文件的平安描述符。因而从平安角度看,这是一个异常不平安的场景。

场景2

Step 1:
起首, wermgr.exe -upload 挪用wermgr!DoCoreUpload函数,该函数会列出ReportQueue下的一切子目次。读取毛病报告并提交给微软。
Step 2:
假如 wermgr.exe 发明破坏的Report.werINI文件,就修正其DACL,以后再删除它。详细来看:

  • 起首,wermgr!DeleteCorruptedReportFromStore列出一切的子目次的文件;
  • 然后,wermgr!PreparePathForDeletion修正每一个文件的权限。由于函数运用kernel32!GetFileSecurity读取了文件的平安描述符,并挪用kernel32!SetFileSecurity来运用删除文件描述符,这也就破绽的基础地点。

    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;
      }
    
      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 | /* ... */;
          /* ... */
    
          SetEntriesInAcl(1, &ExplicitAccess, Dacl, &NewAcl);
          InitializeSecurityDescriptor(&SecurityDescriptor, 1);
          SetSecurityDescriptorDacl(&SecurityDescriptor, 1, NewAcl, 0);
          SetFileSecurity(FilePath, DACL_SECURITY_INFORMATION, 
                      &SecurityDescriptor);   
      }
    }

    在准确的时候建立链接是异常难题的,黑客会不断地尝试直到胜利为止。进击者可能会进击DLL、EXE和剧本等可实行文件,用歹意payload来掩盖他们,然后用System权限来实行歹意payload。

Tale of a Windows Error Reporting Zero-Day (CVE-2019-0863)


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明CVE-2019-0863破绽剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址