分类 技术分享 下的文章

时隔六个月,MS15-124 FIXED

我之前报告的(http://www.nul.pw/2015/06/03/90.html)IE10的漏洞已经在2015-12补丁中修复。

Internet Explorer Memory Corruption Vulnerability,CVE-2015-6162

该漏洞实际上是一个CTreeNode的Use after free。

Timeline:
2015/06/09 Found the problem.
2015/07/29 Send report to MSRC
2015/08/03 Microsoft confirmed the vunlerability
2015/08/03 CVE assigned
2015/09/03 Request for the progress
2015/09/04 Repairing in progress
2015/11/12 Repair complete, ask for acknowledgement
2015/12/09 The patch was released.

Acknowledgment (https://technet.microsoft.com/zh-cn/library/security/dn903755.aspx):
MS15-124 Internet Explorer Memory Corruption Vulnerability CVE-2015-6162 Wenxiang Qian of TencentQQBrowser

LastError=,=

惊闻我的代码出现了一个BUG。

本来逻辑是这样没问题,完全调通了

if(XXX失败)
{
    DWORD dwLastErr = GetLastError();
    if(某种特定的Error == dwLastErr)
    {
         doRepairLogic();
    }
}

发布之前心想失败了还是加个上报吧。

if(XXX失败)
{
    DoDataReport(xx);
    DWORD dwLastErr = GetLastError();
    if(某种特定的Error == dwLastErr)
    {
         doRepairLogic();
    }
}

上报完dwLastErr被覆盖成了0,后面逻辑全挂了……。

系统环境块,又是一个深坑

又是史前巨坑级别。维护服务代码的时候,发现里面有一个常用的CreateProcessAsUser。本来这个功能用在其他地方啥事没有,这一天我突然接到一个需求,要调用一个只能在用户权限运行的程序。本来获取User token,再Create Process一气呵成。跟踪一下却有些蹊跷

xxxy.png

卧槽这什么鬼,明明是当前用户起来的,仔细看了代码,果不其然,lpEnviroment用的是NULL,使用父进程的Enviroment,然而父进程是SYSTEM起的。

bfa1af.png

某智能Handle类 hDumpToken; 
if (!DuplicateTokenEx(hUserToken, MAXIMUM_ALLOWED, NULL, SecurityIdentification, TokenPrimary, &hDumpToken))
{
  return;
}

LPVOID lpEnvironmentBlock = NULL;
if (!CreateEnvironmentBlock(&lpEnvironmentBlock, hDumpToken, FALSE))
{
  return;
}

BOOL ret = CreateProcessAsUserW(hDumpToken, NULL,
  (LPWSTR)strFile.c_str(),
  NULL, NULL, FALSE,
  NORMAL_PRIORITY_CLASS | CREATE_UNICODE_ENVIRONMENT, lpEnvironmentBlock, NULL,
  &si, &pi);

wtf。