Dans le sous-système eBPF, qui permet d'exécuter des gestionnaires pour le traçage, l'analyse des performances des sous-systèmes et la gestion du trafic, exécutés à l'intérieur du noyau Linux dans une machine virtuelle spéciale avec JIT, une vulnérabilité a été identifiée (CVE-2021-29154) permettant à un utilisateur local d'exécuter son code au niveau du noyau. Le problème concerne les versions jusqu'à la 5.11.12 (inclus) et n'est pas encore corrigé dans les distributions (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). Un correctif est disponible sous forme de patch.
Selon les chercheurs ayant identifié la vulnérabilité, ils ont réussi à développer un prototype fonctionnel d'exploit pour les systèmes 32 et 64 bits x86, qui peut être utilisé par un utilisateur non privilégié. Red Hat note que le danger du problème dépend de l'accès de l'utilisateur à l'appel système eBPF. Par exemple, dans RHEL et la plupart des autres distributions Linux, dans la configuration par défaut, la vulnérabilité peut être exploitée si BPF JIT est activé et que l'utilisateur a des droits CAP_SYS_ADMIN. Comme mesure de protection, il est recommandé de désactiver BPF JIT en utilisant la commande : echo 0 > /proc/sys/net/core/bpf_jit_enable
Le problème est causé par une erreur de calcul de décalage pour les instructions de branchement lors de la génération du code machine par le compilateur JIT. En particulier, lors de la génération d'instructions de branchement, il n'est pas pris en compte que le décalage peut changer après la phase d'optimisation. Cette lacune peut être exploitée pour former un code machine anormal et l'exécuter au niveau du noyau.
Il est notable que ce n'est pas la seule vulnérabilité dans le sous-système eBPF récemment. Fin mars, deux autres vulnérabilités ont été découvertes dans le noyau (CVE-2020-27170, CVE-2020-27171), permettant d'utiliser eBPF pour contourner la protection contre les vulnérabilités de type Spectre, permettant de déterminer le contenu de la mémoire du noyau en créant des conditions pour l'exécution spéculative de certaines opérations. Une attaque Spectre nécessite qu'une séquence d'instructions spécifique soit présente dans le code privilégié, conduisant à l'exécution spéculative d'instructions. Plusieurs moyens de générer de telles instructions ont été trouvés dans eBPF par des manipulations des programmes BPF à exécuter.
La vulnérabilité CVE-2020-27170 est causée par la présence de manipulations de pointeurs dans le vérificateur BPF, entraînant des opérations spéculatives accédant à des zones hors limites de mémoire tampon. La vulnérabilité CVE-2020-27171 est liée à une erreur d'arithmétique entière (dépassement de capacité) lors de la manipulation de pointeurs, conduisant à un accès spéculatif à des données en dehors du tampon. Ces problèmes ont déjà été corrigés dans les versions du noyau 5.11.8, 5.10.25, 5.4.107, 4.19.182 et 4.14.227, et ont également été intégrés dans les mises à jour du noyau de la plupart des distributions Linux. Les chercheurs ont préparé un prototype d'exploit permettant à un utilisateur non privilégié d'extraire des données de la mémoire du noyau.
Source : opennet.ru
