
Exploit en C pour CVE-2017-16995, une escalade de privilèges locale du noyau Linux via l'appel système eBPF bpf(2), ciblant les systèmes Ubuntu/Debian avec les versions du noyau 4.4-4.14.
Ubuntu est un système d'exploitation GNU/Linux open source principalement destiné aux applications de bureau, basé sur Debian GNU/Linux. Récemment, un hacker éthique a révélé que la dernière version d'Ubuntu (Ubuntu 16.04) présente une vulnérabilité d'élévation de privilèges locaux, référencée CVE-2017-16995. Cette vulnérabilité existe dans le noyau Linux qui appelle eBPF bpf(2). Lorsqu'un utilisateur fournit un programme BPF malveillant, le module de vérification eBPF produit une erreur de calcul, entraînant des problèmes de lecture/écriture mémoire arbitraire. Un utilisateur à faibles privilèges peut exploiter cette vulnérabilité pour obtenir des privilèges d'administration. Cette vulnérabilité a été corrigée dans les anciennes versions, mais elle reste exploitable dans la version la plus récente. Aucun correctif officiel n'a encore été publié, et la vulnérabilité est en état 0day.
Linux Kernel Version 4.14-4.4 Affecte uniquement les distributions Ubuntu/Debian
Élevé
bearcat@ubuntu:/opt$ lsb_release -a
<br>No LSB modules are available.
<br>Distributor ID: Ubuntu
<br>Description: Ubuntu 16.04.4 LTS
<br>Release: 16.04
<br>Codename: xenial
<br>bearcat@ubuntu:/opt$ uname -a
<br>Linux ubuntu 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
<br>bearcat@ubuntu:/opt$ id
<br>uid=1000(bearcat) gid=1000(bearcat) <br>groups=1000(bearcat),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare)
<br>bearcat@ubuntu:/opt$ ls
<br>exploit.c
<br>bearcat@ubuntu:/opt$ gcc exploit.c -o exploit
<br>bearcat@ubuntu:/opt$ ./exploit
<br>task_struct = ffff88003a0db800
<br>uidptr = ffff8800374b76c4
<br>spawning root shell
<br>root@ubuntu:/opt# id
<br>uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare),1000(bearcat)
<br>root@ubuntu:/opt#
Aucune mise à jour corrective claire n'est disponible pour le moment, mais il est recommandé de limiter l'accès des utilisateurs normaux à l'appel système bpf(2) en modifiant les paramètres du noyau pour atténuer le problème :
Définir le paramètre kernel.unprivileged_bpf_disabled = 1 pour empêcher cette élévation de privilèges en restreignant l'accès à l'appel bpf(2).
root@Ubuntu# echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
Mettre à jour la version du noyau Linux, cela nécessite un redémarrage du serveur pour prendre effet :
Cette étape a déjà été décrite dans le processus de mise en place de l'environnement. L'utilisateur n'a qu'à modifier la version du noyau !
Correctif de code https://github.com/torvalds/linux/commit/95a762e2c8c942780948091f8f2a4f32fce1ac6f