演示 Java 中 CVE-2015-4843 的类型混淆和堆溢出漏洞利用,并提供 aarch64 和 Morello 的演示,突出 CHERI 能力限制。
漏洞详情在 confluence 中讨论。
此仓库在沉寂多年后重新被启用,尚未查看 DisabledSecurityManager 代码。
这是一个演示,展示了我们可以溢出到 dst 数组之前的位置。此演示可在 aarch64 和 morello 上运行,不过溢出仅在被严格限制边界的 WIP 分支上被阻止。这相当酷,因为它表明仅使用 cheri 能力并不能为托管运行时提供足够的保护,我们需要约束我们的堆。
此演示展示了通过利用溢出将 FakeClass oop 复制到 RealClass 数组,我们可以进行类型混淆并使其执行 FakeClass 的函数。该演示仅在 aarch64 上工作,因为在 morello 上,oop 不是 MemoryAddress,我们无法再使用 IntBuffer 漏洞。这是对我们移植工作的一个有趣附带好处。
溢出和类型混淆都可以通过 jar 运行,参数如下:
overflow:运行 OverflowDemoconfusion:运行 TypeConfusionDemo示例如下:
./build/bsd-aarch64-template-aarch64-release/jdk/bin/java -Xmx8G -Xms8G -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -jar /home/slatere/phrack/target/TestOverflow-1.0-SNAPSHOT-jar-with-dependencies.jar confusion
jar 文件通过 build-phrack.yml 生成到远程主机上。