
Repositório de demonstração para explorações de confusão de tipo e estouro de heap do CVE-2015-4843 na JVM, com demonstrações Java executáveis que mostram corrupção de memória nas arquiteturas aarch64 e Morello.
Os detalhes sobre a vulnerabilidade são discutidos no confluence.
Este repositório foi retomado após alguns anos de inatividade, sem ter examinado o código DisabledSecurityManager.
Esta é uma demonstração que mostra que podemos fazer overflow antes do array dst. Esta demonstração funciona em aarch64 e morello, embora o overflow só seja parado no branch WIP onde os limites são estritamente restritos. O que é muito legal, pois mostra que usar apenas capacidades cheri não oferece proteção suficiente para runtimes gerenciados, e precisamos restringir nosso heap.
Esta demonstração mostra que, ao copiar um FakeClass oop para um array de RealClass usando o overflow, podemos confundir o tipo e fazê-lo executar a função de FakeClass. Esta demonstração funciona apenas em aarch64, pois em morello um oop não seria um MemoryAddress, e não podemos mais usar a exploração IntBuffer. O que é um benefício colateral interessante para nossa porta.
Tanto o overflow quanto a type confusion podem ser executados a partir do jar com o argumento:
overflow: executa o OverflowDemoconfusion: executa o TypeConfusionDemoum exemplo é:
./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
o jar é gerado no remoto usando o build-phrack.yml.