-
-
[原创]【Chakra】CVE-2017-11809
-
发表于:
2017-11-2 18:24
6374
-
[原创]【Chakra】CVE-2017-11809
这个漏洞是10月份Chakra最新补丁所修补的,POC由韩国神童公布在Pj0
https://bugs.chromium.org/p/project-zero/issues/detail?id=1338&can=1&q=lokihardt%40google.com
执行POC异常地点如下
其中rcx的值为0x4208
导致mov内存访问违例,分析发现rcx其实是ScopeSlots对象的private成员slotArray
追溯slotArray的来源发现是由scopeSlots进行初始化的
而scopeSlots是在frameDisplay中取出的,frameDisplay是传递的FrameDisplay对象指针
继续跟踪frameDisplay的来源
可以看到stackFrameDisplay是在interpreterFrame中取出的
观察以下调用栈
注意ThrowStackOverflowError
,之所以会产生这个错误推测是因为poc递归的相互调用导致了栈空间被耗尽。
之后发生的事情与描述的一致,在InterpreterStackFrame::INTERPRETERLOOPNAME
函数中,正常情况下是由this->InitializeClosures();
对栈变量进行初始化的。但是由于poc耗尽了栈空间,导致PROBE_STACK函数直接抛出异常,而在异常处理函数中却引用了还未来的及初始化的栈变量,导致了内存未初始化漏洞。
function trigger() {
let a, b, c;
function g() {
trigger();
a, b, c;
}
g();
}
trigger();
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)