Contexte de la vulnérabilité

Le groupe de recherche VUSec‑Scuola Superiore Sant'Anna a présenté une nouvelle variante de Spectre‑v2, baptisée Branch Target Reuse (BTR). Elle cible les moteurs JIT présents dans les navigateurs (SpiderMonkey de Firefox), les environnements d’exécution (GraalVM) et le JIT du filtre cBPF du noyau Linux. Le point d’appui repose sur le fait que, après une auto‑modification de code, les processeurs modernes restaurent la cohérence architecturale mais ne suppriment pas systématiquement les entrées du Branch Target Buffer (BTB) associées aux adresses libérées.

Mécanisme d’exploitation BTR

Les attaquants exécutent d’abord du code non privilégié dans le JIT afin de créer un « training chunk ». Cette allocation génère une entrée BTB pointant vers l’adresse du chunk. Après libération du chunk, le même espace mémoire est réattribué à un « target chunk » contenant du code contrôlé par l’attaquant. Lors d’un second appel indirect, le prédicteur de branche sélectionne l’entrée BTB obsolète, provoquant un saut spéculatif vers l’ancien point d’entrée. Le processeur exécute alors de façon transitoire du code invalide, contournant les barrières Spectre (IBPB, retpoline) et permettant la lecture de données sensibles via un canal de temporisation du cache. Le flux d’attaque se résume ainsi : allocation → insertion BTB → désallocation → réallocation → déclenchement de branche indirecte → exécution spéculative → fuite de secret.

Évaluation et impacts

Les chercheurs ont démontré la faisabilité sur trois cibles : SpiderMonkey, GraalVM et le JIT cBPF du noyau Linux. Bien que les taux de fuite varient, les deux PoC Linux permettent de récupérer le hash du mot de passe root en quelques minutes, même sur un système Intel entièrement à jour avec les protections par défaut activées. Cette capacité montre que les mitigations classiques de Spectre‑v2 (IBPB, STIBP) ne suffisent pas lorsqu’une entrée BTB persiste après la libération du code JIT.

Mitigations et limites

Après divulgation responsable, les correctifs ont été intégrés au noyau Linux sous les identifiants CVE‑2026‑64507 et CVE‑2026‑64508, qui invalident les entrées BTB lors de la libération de blocs JIT. GraalVM limite le problème en randomisant les emplacements du cache JIT, réduisant la probabilité de réutilisation d’adresse. Mozilla explore l’usage d’IBPB mais privilégie le déploiement de l’isolation de site, qui empêche le partage de code JIT entre origines. Malgré ces mesures, la dépendance au BTB reste un vecteur difficile à éradiquer complètement, surtout sur les architectures où la mise à jour du BTB n’est pas garantie par le matériel.