Hier veröffentliche ich Analysen von öffentlichen Exploits sowie einige meiner 1day-Exploits.
[ Analyse öffentlicher Exploits ]
Meiner Meinung nach ist der beste Weg, einen öffentlichen Exploit zu lernen, ihn Zeile für Zeile zu verstehen, bis ich ihn vollständig durchdringe. Ich werde einige dieser (übermäßig kommentierten ;) ) Exploits posten, damit hoffentlich andere davon lernen können, und als Versuch, der Community etwas zurückzugeben. Außerdem zu Dokumentationszwecken, denn diese Dinge verblassen mit der Zeit irgendwie aus meinem Gedächtnis.
Dieser Exploit überschreibt einen Objektzeiger in einem anderen Objekt. Er nutzt einen ret2dir-Angriff, um den korrupten Zeiger auf eine vorhersehbare feste Adresse im Kernel zeigen zu lassen, die das Exploit-Payload enthält. Diese Exploit-Technik umgeht PXN & PAN.
Setzt 16 Bytes an einer beliebigen Adresse auf null
Dieser Exploit löscht 16 Bytes eines nützlichen globalen Objekts, das sich an einer festen Adresse im Kernel befindet.
Ein korrupter Objektzeiger innerhalb des globalen Objekts referenziert ein Exploit-Payload aus dem Userland. Diese Art von Angriff funktioniert nicht auf Geräten/Kerneln mit PAN (oder PAN-Emulation).
extra_recipe
Mein Versuch, den extra_recipe-Jailbreak zu verstehen
Mich interessierte besonders der KPP-Bypass-Teil. Obwohl es ein paar Folien zu diesem Thema gab, aus denen ich ein vages Bild des Bypasses gewinnen konnte, wollte ich unbedingt in die feinen Details eintauchen und sehen, was im Code tatsächlich passiert
Ich wollte auch die letzten Zutaten für einen Jailbreak verstehen (Installation von Cydia usw.)
yalu102 (ViewController.m)
Ich habe den Teil kommentiert, der für den eigentlichen Bug relevant ist, sowie die Art und Weise, wie er ausgenutzt wurde.
Der Grund, warum ich mich mit yalu102 statt mit dem ursprünglichen Exploit beschäftigt habe, ist, dass die Port-Feng-Shui-Technik sauberer und einfacher zu verstehen wirkte.
Er verwendet erstaunliche Techniken, um von wirklich schwachen Primitiven auszugehen, ein stärkeres AAR aufzubauen und schließlich einen vollwertigen Task-Port zu konstruieren. Die Port-Magie hinter dem Exploit-Code ist unglaublich. All dies mit einem 8-NULL-Byte-Heap-Overflow. Absolut atemberaubend.
Ich habe einige naive Ideen zur Verbesserung der Zuverlässigkeit festgehalten. Hoffentlich veröffentlicht jemand in Zukunft eine zuverlässigere Version des Exploits. :)
Ein großes Dankeschön an kudima(@begger_dd) für den sehr klaren, prägnanten und gründlich annotierten Writeup! :)
Der Writeup erklärt den JIT-Type-Confusion-Bug, einige Einschränkungen bei Konvertierungen von Boxing/Unboxing (die zu Unzuverlässigkeit führen können) und einen detaillierten Durchgang, wie die frühen/späten AAR/AAW-Primitive konstruiert werden. Er gibt auch Einblicke in die Änderungen der Exploitation-Techniken nach der jüngsten Runde von Mitigationen (Index-Masking, ArrayBuffer-Backing-Store-Poisoning, einige Änderungen am Mechanismus des W^X-JIT, Änderungen an der JSObject-Struktur usw.)
jsc_ConcatMemcpy_infoleak
Dies ist eine kommentierte Version von kudima's WebKit-Infoleak-Exploit (behoben am 27.08.2018).
Er stammt von einer unvollständigen Korrektur eines der von lokihardt gemeldeten Bugs. Der Patch aus lokihardt's Bericht behob das Double → Object-Type-Confusion-Primitiv, aber nicht umgekehrt: Object → Double.
Er sprayst den WebKit-Heap mit Butterflies, die ein einzelnes Objekt und einen Marker enthalten, und löst später den Concat-Bug aus, wodurch ein großer Teil mehrerer Double-Arrays mit nicht initialisierten Heap-Daten gefüllt wird. Er iteriert durch die nicht initialisierten, durch den fehlerhaften Concat erzeugten Double-Arrays, bis er die Adresse des zuvor gesprayten Objekts findet, und leakt sie.
Nochmals Danke an kudima(@begger_dd) für den schönen Exploit und den Writeup! :)
[ 1Day ]
CVE-2017-2547
Eines Tages sah ich mir singi's Exploit an, nachdem er auf der Zer0con 2018 präsentiert wurde, und beschloss, ihn zu verbessern.
Dies ist eine eigenständige Version des Exploits, bevor ich ihn in pwnjs integriert habe.
Die Verbesserungen umfassen
Erhöhte Zuverlässigkeit (funktioniert einwandfrei nach ausgiebigen Browsing-Sitzungen mit kontaminiertem Speicher)
Entfernte alle fest codierten Offsets, um ihn mit verschiedenen Browserversionen kompatibel zu machen
Verwendete eine andere Exploitation-Technik (die gängige Misalign-Technik)
Integrierte ihn schließlich in das pwnjs-Framework, indem ich einen WebKit-Prototyp erstellte
Machte den Code wesentlich lesbarer und fügte viele Kommentare hinzu
Besonderer Dank
qwertyoruiop & Samuel Grob für den erstaunlichen Phrack-Artikel und die öffentlichen Exploits
Brian Pak & Andrew Wesie für das großartige pwnjs-Framework!