Wednesday, December 22, 2010

Tango Down

L'expression est la mode. La victime du jour: Skype.

Sur le blog de Skype, on peut lire:

Under normal circumstances, there are a large number of supernodes available. Unfortunately, today, many of them were taken offline by a problem affecting some versions of Skype. As Skype relies on being able to maintain contact with supernodes, it may appear offline for some of you.

Je ne peux m'empecher de repenser aux presentations de Serpi, Phil et compagnie sur le sujet, evoquant la possibilite de DoS-er le reseau Skype en envoyant aux super-noeuds la commande de desactivation.

Maintenant les techniciens de Skype s'activent a creer de nouveaux mega super-noeuds pour retablir le reseau. C'est moche.

Overflow du serveur FTP de IIS 7.5

Comme cadeau de Noel cette annee, Microsoft a decide de nous offrir un overflow distant pre-authentification dans le service FTP de IIS 7.5 (Windows 7 et 2008 R2). Le bug est marrant. Considerons l'extrait de pseudo code C suivant:

char *src,*dst,*end;
...
while (src!=end) {
if (*(++src)==(char)0xff)
    *(dst++)=(char)0xff;
*(dst++)=*src;
}

Evidemment, si dst a assez de place pour accomoder les caracteres 0xff supplementaires, tout se passe bien. Le probleme se situe dans un cas particulier ou si la taille de src plus le nombre de 0xff est inferieure ou egale a la taille du buffer courant, alors pas la peine d'allouer dst, et on se contentera de dst=src. Dans ce cas precis, si src contient deux caracteres 0xff (ou plus, et pas necessairement consecutifs), dst va commencer a ecrire des 0xff dans une portion de src pas encore lu. Le nombre de 0xff dans src n'est alors plus deux, mais trois, et ca continue a augmenter. Au final, on va deborder de dst avec plein de 0xff.

La simple chaine '\xff\xff\xff\xff'+'A'*0x200+'\r\n' fera planter le service FTP d'IIS.

Le bug est-t-il exploitable? C'est loin d'etre gagne. La taille allouee pour src est controlable, la taille du debordement est controlable, le contenu ... pas super controlable. Il se peut qu'il soit possible de faire quelque chose avec le contenu d'un chunk ecrase par une serie de 0xff avant que le processus ne parte en vrille. Ou pas.

Maintenant concernant la terminologie: un debordement de buffer peut aboutir a un deni de service s'il n'est pas correctement exploite, les deux termes ne sont pas exclusifs.