首页
社区
课程
招聘
[原创]【Chakra】CVE-2017-11809
发表于: 2017-11-2 18:24 6574

[原创]【Chakra】CVE-2017-11809

2017-11-2 18:24
6574

这个漏洞是10月份Chakra最新补丁所修补的,POC由韩国神童公布在Pj0
a30K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1N6h3N6K6i4K6u0W2j5$3S2J5L8$3#2A6N6h3#2Q4x3X3g2G2M7X3N6Q4x3V1k6H3i4K6u0r3M7s2u0G2K9X3g2U0N6q4)9J5k6s2A6W2M7X3!0Q4x3V1k6A6M7%4y4#2k6i4y4Q4x3V1k6V1k6i4c8S2K9h3I4Q4x3@1k6A6k6q4)9K6c8o6p5K6x3K6S2Q4x3U0k6S2L8i4m8Q4x3@1u0U0j5h3&6Q4x3@1b7I4i4K6t1$3j5h3#2H3i4K6y4n7M7g2)9K6c8r3I4G2K9$3W2Z5j5i4u0V1N6q4)9J5y4e0b7H3k6$3!0G2k6$3I4W2i4K6u0W2j5$3!0E0

执行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();

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 1746
活跃值: (277)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
emmmm,大佬,exp编写过程呢
2017-11-3 08:33
0
雪    币: 27
活跃值: (637)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
坐等exploit
2017-11-15 14:10
0
游客
登录 | 注册 方可回帖
返回