Friday, June 26, 2009
Monday, June 15, 2009
Je ne suis pas mort.
Coin les moulasses,
Après 3 mois de codage très intensément mava-esk dans les caves d'ig2k, me voilà de retour au taf où je pourrais bloguer à volonter comme les légumes à flunch et ce, malgré que je sois surveillé. ;-)
Allez oust, quelques niouzes sayku de ces dernières semaines.
Phrack numéro #66 est sorti et même si je n'ai pas encore lu tous les articles, je peux déjà dire qu'il rocks des ours. À l'instar du numéro #57, on retrouve pas mal d'articles sur l'exploitation d'heap overflow en userland pour détourner toutes les protections qui ont été ajoutées aux différents allocateurs (ptmalloc2) et même en kernel land sous FreeBSD et Linux (miam). En plus de phrack, j'ai mon voisin aux cheveux longs et au commit bit freebsd qui a les actes du SSTIC posé sur sa table... miam miam les articles sur le fuzzing qui m'ont fait découvrir catchconv ou bunny-the-fuzzer...
Au niveau des vulns, y'a FreeBSD qui a fait fort la semaine passée avec :
* une couille dans les ioctl v6
Dans les ioctl(2) d'IPv6, ils ont laissé une commande (SIOCSIFINFO_IN6) en écriture en openbar pour tout le monde. Un user basique peut placer une MTU très faible sur une interface v6.
* un integer overflow dans le "direct write" des pipe(2) anonymes
Poufpouf le codaj :
size correspond, à quelques checks près, à la taille de la zone à écrire dans le pipe, lors de l'opération uio->uio_iov->iov_base + size pour déterminer l'adresse de la fin de zone, un integer overflow peut intervenir. Ainsi dans ce cas, des données confidentielles du noyau ou d'un autre process peuvent être écrites dans le pipe, reste plus qu'a les lire de l'autre côté. :-)
* une pluie de stack overflows dans ntpd
La meilleur pour la fin avec ntpd et ses 19 stack overflows potentiellement exploitables. Allez voir le patch, ça fait peur. :-)
OK, tous ne sont pas exploitables mais quand même. On peut dire ce que l'on veut sur OpenBSD mais c'est pas dans leur code qu'on trouvera ce genre de chose. :-)
Sur ce, grep -r "sprintf\(" /usr/src/
Après 3 mois de codage très intensément mava-esk dans les caves d'ig2k, me voilà de retour au taf où je pourrais bloguer à volonter comme les légumes à flunch et ce, malgré que je sois surveillé. ;-)
Allez oust, quelques niouzes sayku de ces dernières semaines.
Phrack numéro #66 est sorti et même si je n'ai pas encore lu tous les articles, je peux déjà dire qu'il rocks des ours. À l'instar du numéro #57, on retrouve pas mal d'articles sur l'exploitation d'heap overflow en userland pour détourner toutes les protections qui ont été ajoutées aux différents allocateurs (ptmalloc2) et même en kernel land sous FreeBSD et Linux (miam). En plus de phrack, j'ai mon voisin aux cheveux longs et au commit bit freebsd qui a les actes du SSTIC posé sur sa table... miam miam les articles sur le fuzzing qui m'ont fait découvrir catchconv ou bunny-the-fuzzer...
Au niveau des vulns, y'a FreeBSD qui a fait fort la semaine passée avec :
* une couille dans les ioctl v6
Dans les ioctl(2) d'IPv6, ils ont laissé une commande (SIOCSIFINFO_IN6) en écriture en openbar pour tout le monde. Un user basique peut placer une MTU très faible sur une interface v6.
* un integer overflow dans le "direct write" des pipe(2) anonymes
Poufpouf le codaj :
int i, j;
vm_offset_t addr, endaddr;
(...)
pmap = vmspace_pmap(curproc->p_vmspace);
endaddr = round_page((vm_offset_t)uio->uio_iov->iov_base + size);
addr = trunc_page((vm_offset_t)uio->uio_iov->iov_base);
for (i = 0; addr < endaddr; addr += PAGE_SIZE, i++) {
(...)
size correspond, à quelques checks près, à la taille de la zone à écrire dans le pipe, lors de l'opération uio->uio_iov->iov_base + size pour déterminer l'adresse de la fin de zone, un integer overflow peut intervenir. Ainsi dans ce cas, des données confidentielles du noyau ou d'un autre process peuvent être écrites dans le pipe, reste plus qu'a les lire de l'autre côté. :-)
* une pluie de stack overflows dans ntpd
La meilleur pour la fin avec ntpd et ses 19 stack overflows potentiellement exploitables. Allez voir le patch, ça fait peur. :-)
peer->flash &= ~TEST8;
temp32 = cinfo->nid;
- sprintf(statstr, "cert %s 0x%x %s (%u) fs %u",
+ snprintf(statstr, NTP_MAXSTRLEN,
+ "cert %s 0x%x %s (%u) fs %u",
cinfo->subject, cinfo->flags,
OBJ_nid2ln(temp32), temp32,
ntohl(ep->fstamp));
OK, tous ne sont pas exploitables mais quand même. On peut dire ce que l'on veut sur OpenBSD mais c'est pas dans leur code qu'on trouvera ce genre de chose. :-)
Sur ce, grep -r "sprintf\(" /usr/src/