JIT Spray
Qu'est-ce que JIT Spray ?
JIT SprayTechnique d'exploitation qui abuse des compilateurs JIT pour placer des octets exécutables choisis par l'attaquant dans des pages mémoire générées légitimement comme exécutables.
Le JIT spray est une technique d'exploitation par corruption mémoire visant les runtimes dotés d'un compilateur Just-In-Time : moteurs JavaScript V8, SpiderMonkey, JSC, le CLR .NET, la JVM, ActionScript ou eBPF. L'attaquant rédige un programme haut niveau dont la sortie compilée par le JIT, vue comme des octets bruts, décode en instructions natives ciblées, ce qui permet d'introduire une charge dans les pages RWX produites par le JIT. Combiné à une faille de corruption mémoire qui détourne le flux de contrôle, l'attaquant pivote vers les gadgets « sprayés », contournant les protections d'exécution puisque la mémoire est légitimement exécutable. Les mitigations modernes incluent le constant blinding, la randomisation des régions de code, la séparation W^X, l'ASLR et le CFI.
● Exemples
- 01
Sprayer de nombreuses multiplications JavaScript dont les constantes immédiates encodent du shellcode.
- 02
Utiliser le JIT ActionScript pour placer une NOP sled et du shellcode dans la région JIT de Flash Player.
● Questions fréquentes
Qu'est-ce que JIT Spray ?
Technique d'exploitation qui abuse des compilateurs JIT pour placer des octets exécutables choisis par l'attaquant dans des pages mémoire générées légitimement comme exécutables. Cette notion relève de la catégorie Sécurité applicative en cybersécurité.
Que signifie JIT Spray ?
Technique d'exploitation qui abuse des compilateurs JIT pour placer des octets exécutables choisis par l'attaquant dans des pages mémoire générées légitimement comme exécutables.
Comment fonctionne JIT Spray ?
Le JIT spray est une technique d'exploitation par corruption mémoire visant les runtimes dotés d'un compilateur Just-In-Time : moteurs JavaScript V8, SpiderMonkey, JSC, le CLR .NET, la JVM, ActionScript ou eBPF. L'attaquant rédige un programme haut niveau dont la sortie compilée par le JIT, vue comme des octets bruts, décode en instructions natives ciblées, ce qui permet d'introduire une charge dans les pages RWX produites par le JIT. Combiné à une faille de corruption mémoire qui détourne le flux de contrôle, l'attaquant pivote vers les gadgets « sprayés », contournant les protections d'exécution puisque la mémoire est légitimement exécutable. Les mitigations modernes incluent le constant blinding, la randomisation des régions de code, la séparation W^X, l'ASLR et le CFI.
Comment se défendre contre JIT Spray ?
Les défenses contre JIT Spray combinent habituellement des contrôles techniques et des pratiques opérationnelles, comme détaillé dans la définition ci-dessus.
Quels sont les autres noms de JIT Spray ?
Noms alternatifs courants : Spray JIT.
● Termes liés
- appsec№ 1182
Vulnérabilité de Confusion de Type
Bug de sûreté mémoire où le code accède à un objet via un type incompatible avec son allocation réelle, permettant souvent lecture, écriture ou exécution arbitraires.
- appsec№ 129
Sandbox de Navigateur
Couche d'isolation au niveau OS qui confine les processus renderer et auxiliaires du navigateur afin qu'un code web compromis ne puisse pas lire le système de fichiers ni d'autres applications.
- vulnerabilities№ 1193
Use-After-Free
Bug de sûreté mémoire où un programme continue d'utiliser une zone mémoire après sa libération, permettant souvent à un attaquant de manipuler l'état des objets et de détourner l'exécution.
- attacks№ 471
Heap Spraying
Primitive d'exploitation qui remplit le tas de nombreuses copies du payload pour qu'un pointeur corrompu atterrisse tres probablement sur des donnees attaquant.
- appsec№ 1075
Canal Auxiliaire d'Exécution Spéculative
Classe de vulnérabilités microarchitecturales où les CPU fuient des données via caches et prédicteurs après avoir exécuté spéculativement des instructions qui n'auraient pas dû s'exécuter.
- vulnerabilities№ 399
Exploit
Code, données ou technique exploitant une vulnérabilité pour provoquer un comportement non prévu : exécution de code, élévation de privilèges, fuite d'informations.