VUSec rapporte deux preuves de concept d’exploitation de bout en bout visant le noyau Linux pour Branch Target Reuse (BTR), une technique de type Spectre-v2. L’exploit détaillé cible le JIT cBPF et fuit 8 octets par seconde sur des processeurs Intel modernes.
Ce qu’est Branch Target Reuse (BTR)
BTR exploite la possibilité qu’une ancienne prédiction de branche indirecte subsiste après la libération de code généré par un moteur JIT — un moteur qui compile du code à la volée. Si la mémoire libérée est réutilisée pour un nouveau code, cette prédiction obsolète peut conduire l’exécution spéculative vers ce nouveau code, à un emplacement qui ne correspond plus à l’ancienne cible.
La prédiction des cibles de branche est notamment gérée par le BTB (Branch Target Buffer). Dans la séquence décrite par VUSec, l’attaquant entraîne d’abord une branche à viser un morceau de code JIT, puis ce code est libéré. Un nouveau morceau de code réutilise ensuite une partie de la même zone mémoire. Si l’entrée périmée du BTB subsiste et est sélectionnée, le processeur peut spéculer vers le nouveau code en partant d’un décalage obsolète.
La démonstration suppose que l’attaquant puisse exécuter du code sans privilèges dans un moteur JIT et que cette entrée de prédiction soit conservée puis choisie. Ce sont les conditions de la technique décrite, pas une démonstration d’attaque en cours contre des systèmes Linux.
Ce que VUSec rapporte pour le cBPF de Linux
VUSec dit avoir construit deux preuves de concept d’exploitation de bout en bout contre le noyau Linux. Son exemple détaillé utilise le JIT cBPF, qui compile des programmes BPF classiques, notamment ceux employés comme filtres seccomp. Pour cet exploit sur des processeurs Intel modernes, le débit de fuite rapporté est de 8 octets par seconde.
La démonstration décrite récupère le hachage du mot de passe de root depuis le processus su, après que su root l’a chargé en mémoire. Ce résultat concerne cette démonstration et cet exploit cBPF ; le taux de 8 octets par seconde ne s’applique pas aux autres moteurs étudiés.
Des résultats différents pour SpiderMonkey et GraalVM
VUSec rapporte des attaques réalisables contre SpiderMonkey, le moteur JavaScript de Firefox, ainsi qu’une preuve de concept dont le débit de fuite est estimé à plusieurs dizaines d’octets par seconde sur des processeurs Intel. Un exploit complet de bout en bout dans le navigateur demande toutefois encore du travail.
Pour GraalVM, les chercheurs décrivent des expériences où ils ont obtenu une réutilisation stable d’adresses et un accès spéculatif au-delà d’une opération de masquage. Dans ces essais, la compilation et le ramasse-miettes effaçaient les entrées du BTB avant leur utilisation. VUSec rapporte qu’Oracle a adopté une autre défense : la randomisation des emplacements du cache de code JIT afin de gêner la réutilisation des régions.
VUSec indique aussi que Mozilla avait envisagé des mesures fondées sur IBPB et donnait alors la priorité à l’achèvement et au déploiement de l’isolation des sites.
La mitigation Linux décrite par VUSec
VUSec rapporte que les développeurs du noyau Linux ont intégré en amont une mitigation x86 pour la réutilisation de régions JIT cBPF/eBPF déjà exécutées. Lorsqu’un programme cBPF réutilise une telle région, cette mesure déclenche une instruction IBPB — une barrière de prédiction des branches indirectes — sur tous les cœurs et décourage cette réutilisation. Selon VUSec, elle s’applique que l’IBT (Indirect Branch Tracking, ou suivi des branches indirectes) soit activé ou non.