Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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
pwn2own2020 — Gefährdung des macOS-Kernels über Safari durch Verkettung von sechs Schwachstellen | Kitploit
Tools/GitHubGitHub/sslab-gatech/pwn2own2020
Privilege EscalationExploitationShellcodeWebanwendungs-ExploitationPenetrationstestsPayload-EntwicklungBinary-Exploitation
GitHubsslab-gatech/pwn2own2020

pwn2own2020

Gefährdung des macOS-Kernels über Safari durch Verkettung von sechs Schwachstellen

Repository anzeigen
4145822vor 5 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Kompromittierung des macOS-Kernels über Safari durch die Verkettung von sechs Schwachstellen

Übersicht

Dieses Repository enthält Exploit- und technische Details zu unserem Pwn2Own 2020-Siegerbeitrag, der Apple Safari mit einer Kernel-Rechteausweitung für macOS 10.15.3 angreift. Für weitere Informationen kannst du dir auch unsere Blackhat-USA-2020 Folien und das Video ansehen. Dieses Repository enthält außerdem unser Demo-Video zur erfolgreichen Ausnutzung.

Reproduktion

  1. Führe den HTTP-Server mit python3 im Ordner exploits aus.```shell $ python3 -m http.server 80
2. Öffnen Sie die Website mit der IP des Angreifer-Servers in Safari:```
http://[attacker_ip]/exploit.html
  1. Warten Sie auf den Taschenrechner (normalerweise erscheint er innerhalb von zehn Sekunden, aber wenn Sie Pech haben, kann es etwas dauern) und ein Terminal mit Kernel-Rechten. Um unsere Kernel-Privilegieneskalation zu demonstrieren, haben wir SIP deaktiviert. Sie können dies überprüfen, indem Sie den Befehl csrutil status ausführen, der disabled anzeigt.

Aus dem Quellcode erstellen

Der Einfachheit halber haben wir ein kompiliertes Payload, payload.js, bereitgestellt. Falls Sie möchten, können Sie es aber selbst bauen. Beachten Sie, dass dies sehr lange dauern wird, da wir WebKit als Teil unserer Exploit-Kette erstellen werden. Es ist erwähnenswert, dass wir unseren Build-Prozess nur unter Mac OS getestet haben.```shell

Install xcode first

$ python3 -m pip install --user lief $ make

Technische Details
-----------------

Um diesen Exploit zu erstellen, haben wir die folgenden *SECHS* Schwachstellen miteinander verknüpft.

### 1. Remotecodeausführung in Safari durch fehlerhafte Modellierung von Nebeneffekten des 'in'-Operators im JavaScriptCore DFG-Compiler

- Ursachenanalyse

In JavaScriptCore, wenn eine indizierte Eigenschaft mit dem 'in'-Operator abgefragt wird,
geht der DFG-Compiler davon aus, dass dieser Vorgang nebenwirkungsfrei ist, es sei denn, in seiner Prototypenkette befindet sich ein Proxy-
Objekt, das diesen Vorgang abfangen kann.
JavaScriptCore markiert ein Objekt, das diesen indizierten
Eigenschaftszugriff mithilfe des Flags 'MayHaveIndexedAccessors' abfangen kann. Dieses Flag ist
explizit für das Proxy-Objekt gesetzt.```javascript
0 in [] // side-effect free

let arr = [];
arr.__proto__ = new Proxy({}, {});
0 in arr // can cause side-effect!

Es gibt jedoch ein weiteres Objekt, das Nebenwirkungen verursachen kann: JSHTMLEmbedElement, das eine eigene getOwnPropertySlot()-Methode implementiert. Eine Möglichkeit, JavaScript-Callbacks (d. h. Nebenwirkungen) mit dem in-Operator auszulösen, ist die Verwendung eines <embed>-Elements mit PDF-Plugin; wenn eine Eigenschaft auf dem DOM-Objekt des embed-/object-Tags abgefragt wird, versucht es, das zugrunde liegende Plugin zu laden, und der DOMSubtreeModified-Event-Handler kann im Fall des PDF-Plugins aufgerufen werden, da es die appendChild-Methode für das body-Element verwendet.

Tool herunterladen