Deux vulnérabilités ont été identifiées dans le noyau Linux, permettant d'utiliser le sous-système eBPF pour contourner la protection contre l'attaque Spectre v4 (SSB, Speculative Store Bypass). À l'aide d'un programme BPF non privilégié, un attaquant peut créer des conditions pour l'exécution spéculative de certaines opérations et déterminer le contenu d'areas de mémoire arbitraires dans le noyau. Les sous-systèmes eBPF associés dans le noyau ont obtenu accès à un prototype d'exploit, démontrant la possibilité de mener des attaques dans la pratique. Les problèmes ont été résolus sous forme de patches (1, 2) qui seront inclus dans la prochaine mise à jour du noyau Linux. Les mises à jour dans les distributions ne sont pas encore disponibles (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).
La méthode d'attaque Spectre 4 est basée sur la récupération des données résiduelles dans le cache du processeur après l'abandon du résultat de l'exécution spéculative des opérations lors du traitement d'opérations alternées d'écriture et de lecture utilisant une adresse indirecte. Lorsque l'opération de lecture suit l'opération d'écriture (par exemple, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), le décalage d'adresse pour la lecture peut déjà être connu en raison de l'exécution d'opérations similaires (les opérations de lecture sont exécutées beaucoup plus souvent et la lecture peut être effectuée à partir du cache) et le processeur peut exécuter spéculativement la lecture avant l'écriture, sans attendre que le décalage d'adresse indirect pour l'écriture soit calculé.
Si, après le calcul du décalage, un chevauchement des zones de mémoire pour l'écriture et la lecture est identifié, le processeur rejette simplement le résultat de lecture déjà obtenu de manière spéculative et répète cette opération. Cette particularité permet à l'instruction de lecture d'accéder à une ancienne valeur à une certaine adresse pendant que l'opération de sauvegarde n'est pas encore terminée. Après avoir rejeté l'opération spéculative infructueuse, des traces de son exécution restent dans le cache, après quoi l'une des méthodes de détermination du contenu du cache peut être appliquée, basée sur l'analyse des temps d'accès aux données mises en cache et non mises en cache.
La première vulnérabilité (CVE-2021-35477) est causée par un défaut dans le mécanisme de vérification des programmes BPF. Pour se protéger contre l'attaque Spectre 4, le vérificateur ajoute, après des opérations de sauvegarde en mémoire potentiellement problématiques, une instruction supplémentaire qui sauvegarde une valeur nulle pour éclipser les traces de l'opération précédente. On s'attendait à ce que l'opération d'écriture de zéro se fasse très rapidement et bloque l'exécution spéculative, car elle ne dépend que du pointeur vers le cadre de pile BPF. Cependant, il s'est avéré possible de créer des conditions dans lesquelles l'instruction entraînant l'exécution spéculative peut s'exécuter avant l'opération de sauvegarde écliptique.
La seconde vulnérabilité (CVE-2021-3455) est liée au fait que lors de l'identification par le vérificateur BPF d'opérations de sauvegarde en mémoire potentiellement dangereuses, les zones de pile BPF non initialisées ne sont pas prises en compte, la première opération d'écriture dans celles-ci n'étant pas protégée. Cette spécificité permet d'effectuer une opération de lecture spéculative dépendante d'une zone de mémoire non initialisée avant l'exécution de l'instruction de sauvegarde. Une nouvelle mémoire pour la pile BPF est allouée sans vérifier le contenu déjà présent dans la mémoire allouée, et avant le démarrage du programme BPF, il existe un moyen de contrôler le contenu de la zone mémoire qui sera ensuite allouée pour la pile BPF.
Source : opennet.ru
