JIT-Spray
Was ist JIT-Spray?
JIT-SprayExploit-Technik, die Just-in-Time-Compiler missbraucht, um vom Angreifer gewählte ausführbare Bytes in legitim erzeugte ausführbare Speicherseiten zu platzieren.
JIT-Spray ist eine Speicherkorruptions-Exploit-Technik gegen Laufzeiten mit Just-in-Time-Compilern: JavaScript-Engines wie V8, SpiderMonkey, JSC, das .NET CLR, die JVM, ActionScript oder eBPF. Der Angreifer formuliert ein Hochsprachprogramm, dessen vom JIT erzeugte Ausgabe als Rohbytes zu gewünschten nativen Befehlen dekodiert, sodass Payloads in die RWX-Seiten des JIT geschmuggelt werden können. In Kombination mit einer Speicherkorruption, die den Kontrollfluss übernimmt, kann der Angreifer in die gesprayte Gadgets springen — DEP/NX schlagen nicht an, weil der Speicher legitim ausführbar ist. Moderne Gegenmaßnahmen sind Constant Blinding, zufällige Code-Regionen, W^X-Trennung, ASLR und CFI.
● Beispiele
- 01
Viele JavaScript-Multiplikationen sprayen, deren Konstanten Shellcode-Bytes enthalten.
- 02
Mit dem ActionScript-JIT eine NOP-Sled samt Shellcode in die JIT-Region des Flash Players legen.
● Häufige Fragen
Was ist JIT-Spray?
Exploit-Technik, die Just-in-Time-Compiler missbraucht, um vom Angreifer gewählte ausführbare Bytes in legitim erzeugte ausführbare Speicherseiten zu platzieren. Es gehört zur Kategorie Anwendungssicherheit der Cybersicherheit.
Was bedeutet JIT-Spray?
Exploit-Technik, die Just-in-Time-Compiler missbraucht, um vom Angreifer gewählte ausführbare Bytes in legitim erzeugte ausführbare Speicherseiten zu platzieren.
Wie funktioniert JIT-Spray?
JIT-Spray ist eine Speicherkorruptions-Exploit-Technik gegen Laufzeiten mit Just-in-Time-Compilern: JavaScript-Engines wie V8, SpiderMonkey, JSC, das .NET CLR, die JVM, ActionScript oder eBPF. Der Angreifer formuliert ein Hochsprachprogramm, dessen vom JIT erzeugte Ausgabe als Rohbytes zu gewünschten nativen Befehlen dekodiert, sodass Payloads in die RWX-Seiten des JIT geschmuggelt werden können. In Kombination mit einer Speicherkorruption, die den Kontrollfluss übernimmt, kann der Angreifer in die gesprayte Gadgets springen — DEP/NX schlagen nicht an, weil der Speicher legitim ausführbar ist. Moderne Gegenmaßnahmen sind Constant Blinding, zufällige Code-Regionen, W^X-Trennung, ASLR und CFI.
Wie schützt man sich gegen JIT-Spray?
Schutzmaßnahmen gegen JIT-Spray kombinieren typischerweise technische Kontrollen und operative Praktiken, wie in der Definition oben beschrieben.
Welche anderen Bezeichnungen gibt es für JIT-Spray?
Übliche alternative Bezeichnungen: Just-in-Time-Spray.
● Verwandte Begriffe
- appsec№ 1182
Type-Confusion-Schwachstelle
Memory-Safety-Bug, bei dem Code auf ein Objekt mit einem Typ zugreift, der nicht zur tatsächlichen Allokation passt, und so Lese-, Schreib- oder Codeausführung erlaubt.
- appsec№ 129
Browser-Sandbox
Isolationsschicht auf Betriebssystemebene, die Renderer- und Hilfsprozesse des Browsers eingrenzt, sodass kompromittierter Webcode weder Dateisystem noch andere Anwendungen erreicht.
- vulnerabilities№ 1193
Use-After-Free
Speicher-Sicherheitsfehler, bei dem ein Programm Speicher weiterhin nutzt, nachdem dieser bereits freigegeben wurde – ermöglicht oft Kontrolle über Objektzustand und Kontrollfluss.
- attacks№ 471
Heap Spraying
Exploit-Primitive, die den Heap mit vielen Kopien eines Payloads fuellt, sodass ein korrupter Pointer mit hoher Wahrscheinlichkeit auf angreiferkontrollierte Daten zeigt.
- appsec№ 1075
Spekulative-Ausführung-Seitenkanal
Mikroarchitekturelle Schwachstellenklasse, bei der CPUs Daten über Caches und Predictors leaken, nachdem sie Befehle spekulativ entlang nicht-eingeschlagener Pfade ausgeführt haben.
- vulnerabilities№ 399
Exploit
Code, Daten oder Technik, die eine Schwachstelle ausnutzt, um unbeabsichtigtes Verhalten wie Codeausführung, Privilegieneskalation oder Informationsabfluss zu erzwingen.