Oracle JRE java.awt.Menu Use-After-Free 远程代码执行漏洞分析与利用

二进制安全研究 bobo 阅读(1992) 0评论

1. 漏洞描述

漏洞编号:CVE-2016-5568

影响版本:Java SE <=   6u121, 7u111, 8u102

此漏洞由西安四叶草安全旗下的安全实验室(CloverSec Labs)的bo13oy于今年4月份发现并提交给Oracle,在10月份的补丁中修复。

2. 测试环境

Windows 7 x86 + jdk_1.8.0_102

3. 漏洞分析

1)漏洞类型

1)开启页堆和堆栈跟踪数据库(gflags.exe -I java.exe +hpa +ust),运行Poc时的崩溃信息如下:

2)用!heap -p -a edi 命令查看edi指向的内存信息如下:

从上面信息可以看到此块内存已被释放,表明这是一个UAF漏洞。

2)漏洞成因

1)崩溃PC对应的代码如下:

从上面部分的代码可以看出,在调用v3对象的虚函数时,由于v3已被释放,此时再去获取v3的虚表信息就导致崩溃。

2)根据上面的!heap -p -a edi 命令获取的信息,可得释放部分的代码如下

3) 在释放函数sub6D0968A2下断点,可得对象创建时的内存信息,如下所示:

创建对象时的代码如下:

由此可知,对象被释放时,未将其引用自身的悬空指针置空,导致了此UAF漏洞。

4. 漏洞利用

根据崩溃点代码逻辑可知,崩溃时程序尝试去调用被释放对象的虚函数,在该对象释放后,可以使用精确堆喷,用可控数据去占用这块已被释放的内存,当虚函数被调用时,控制 EIP 并执行 shellcode。

运行Poc,eax已被控制为0x42424242,如下所示:

最后,通过JIT堆喷,寻找一个可靠地址,修正EIP,执行shellcode。

5. 漏洞演示

利用该漏洞绕过了安全沙箱的限制,并成功弹出计算器:

6. 参考链接

1. https://github.com/guhe120/CVE20131491-JIT

转载请注明:CloverSec Labs » Oracle JRE java.awt.Menu Use-After-Free 远程代码执行漏洞分析与利用

喜欢 (4)or分享 (0)
发表我的评论
取消评论
表情

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

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