ClickCease Le code BPF peut permettre une élévation locale des privilèges (CVE-2021-29154) - TuxCare

Rejoignez notre populaire bulletin d'information

Rejoignez 4 500+ professionnels de Linux et de l'Open Source !

2 fois par mois. Pas de spam.

Le code BPF peut permettre une élévation locale des privilèges (CVE-2021-29154)

Le 12 avril 2021 - L'équipe de relations publiques de TuxCare

Another vulnerability targeting the BPF subsystem has been disclosed publicly in the past few days (CVE-2021-29154). It allows users on a system running non-default configuration of the BPF subsystem to run specially crafted code as a BPF filter and run arbitrary executable code in the kernel context.   According to vendors, it affects all distributions running kernels up to version 5.11.12. Distribution vendors are starting to deliver patches through their update mechanisms, and KernelCare is also finalizing patches for it’s rebootless patching process to address this issue.  Because of the nature of the BPF functionality, which is to allow user code to interact with network packet processing within the kernel, there is a very big potential for attack given any weakness in the implementation. This specific functionality has been addressed recently in the specter mitigation code bug discussed here.  To be vulnerable, a system would have to be configured to allow BPF JIT compilation (for example, by setting “net.core.bpf_jit_enable = 1”). This is often the case in situations where regular users are doing work related to sockets’ manipulation or in seccomp (secure computing mode) environments where permissions are granted more granularly than normal.  The actual vulnerable code resides in arch/x86/net/bpf_jit_comp.c and arch/x86/net/bpf_jit_comp32.c in the kernel source code tree. The flaw comes from the way branch displacement happens when the user code is compiled, by making wrong assumptions regarding the address of code during optimization.  Proper exploitation of this vulnerability could even lead to container or chroots’ escape, since the kernel is shared between them, and running code in the kernel context permits it to escape containerization limits.  As a stop-gap procedure, you can quickly disable BPF JIT by running:  # echo 0 > /proc/sys/net/core/bpf_jit_enable   Which will persist until reversed or a system reboot. A more permanent removal can be achieved by using your distribution’s syscfg equivalent utility to set “net.core.bpf_jit_enable=0” at boot time. Of course, this type of solution solves the problem by disabling the functionality, which in itself is self-defeating. If you actually had your system configured to use BPF JIT, in all likelihood your use case needed that setting explicitly enabled, and you should rely instead on proper kernel patching, either through your distribution vendor’s patches or through KernelCare’s rebootless process.&#8221; width=&#8221;2600&#8243; loading=&#8221;lazy&#8221; style=&#8221;width: 2600px;&#8221;></p><p style=Une autre vulnérabilité visant le sous-système BPF a été divulguée publiquement ces derniers jours (CVE-2021-29154). Il permet aux utilisateurs d'un système utilisant une configuration par défaut du sous-système BPF d'exécuter un code spécialement conçu comme un filtre BPF et d'exécuter un code exécutable arbitraire dans le contexte du noyau. 

 

Selon les fournisseurs, ce problème affecte toutes les distributions utilisant des noyaux jusqu'à la version 5.11.12. Les distributeurs commencent à fournir des correctifs via leurs mécanismes de mise à jour, et KernelCare finalise également des correctifs pour son processus de correction sans redémarrage afin de résoudre ce problème.

En raison de la nature de la fonctionnalité BPF, qui consiste à permettre au code utilisateur d'interagir avec le traitement des paquets réseau au sein du noyau, le potentiel d'attaque est très élevé en cas de faiblesse dans l'implémentation. Cette fonctionnalité spécifique a été abordée récemment dans le bogue du code d'atténuation de Spectre dont il est question ici.

 

Pour être vulnérable, un système doit être configuré pour autoriser la compilation BPF JIT (par exemple, en définissant "net.core.bpf_jit_enable = 1"). C'est souvent le cas dans les situations où des utilisateurs réguliers effectuent des travaux liés à la manipulation des sockets ou dans les environnements seccomp (secure computing mode) où les permissions sont accordées de manière plus granulaire que la normale.

 

Le code vulnérable se trouve dans arch/x86/net/bpf_jit_comp.c et arch/x86/net/bpf_jit_comp32.c dans l'arbre du code source du noyau. La faille provient de la façon dont le déplacement de branche se produit lorsque le code utilisateur est compilé, en faisant de mauvaises suppositions concernant l'adresse du code pendant l'optimisation.

 

Une exploitation correcte de cette vulnérabilité pourrait même conduire à l'évasion des conteneurs ou des chroots, puisque le noyau est partagé entre eux, et que l'exécution de code dans le contexte du noyau lui permet d'échapper aux limites de la conteneurisation.

 

Comme procédure provisoire, vous pouvez rapidement désactiver BPF JIT en exécutant :

 

# echo 0 > /proc/sys/net/core/bpf_jit_enable

 

 

qui persistera jusqu'à ce qu'il soit annulé ou qu'un redémarrage du système ait lieu. Une suppression plus permanente peut être obtenue en utilisant l'utilitaire équivalent syscfg de votre distribution pour définir "net.core.bpf_jit_enable=0" au démarrage. Bien sûr, ce type de solution résout le problème en désactivant la fonctionnalité, ce qui est en soi un échec. Si votre système a été configuré pour utiliser BPF JIT, il est fort probable que votre cas d'utilisation nécessitait l'activation explicite de ce paramètre, et vous devriez plutôt vous fier aux correctifs appropriés du noyau, soit par le biais des correctifs de votre distributeur, soit par le biais du processus sans redémarrage de KernelCare.

Vous cherchez à automatiser la correction des vulnérabilités sans redémarrage du noyau, temps d'arrêt du système ou fenêtres de maintenance programmées ?

Découvrez le Live Patching avec TuxCare

Devenez rédacteur invité de TuxCare

Commencer

Courrier

Rejoindre

4,500

Professionnels de Linux et de l'Open Source
!

S'abonner à
notre lettre d'information