nginx [NGINX] est un serveur web léger et performant, fonctionnant sur la plupart des systèmes d'exploitation (Linux, BSD, Mac OS X, Solaris, Windows). D'après l'étude de Netcraft de septembre 2009 [NETCRAFT], il serait le 4ème serveur web le plus utilisé dans le monde. Dû à la médiatisation de la vulnérabilité Windows SMB2, l'annonce d'une vulnérabilité touchant toutes les versions du serveur web nginx est passée largement inaperçue. Reportée par Chris Ries, elle a été patchée le 14 septembre 2009 avec un message de commit concis, mais néanmoins plus honnête que ceux du noyau Linux : « Security: a segmentation fault might occur in worker process while specially crafted request handling. »
1. Analyse de la vulnérabilité
1.1 Analyse du patch
Le patch [PATCH] indique que le bug se situe dans la fonction ngx_http_parse_complex_uri (src/http/ngx_http_parse.c) responsable du parsing d'URI complexe, c'est-à-dire comportant des caractères encodés en hexadécimal, des ./, ../, etc. :
Index: src/http/ngx_http_parse.c
===================================================================
--- src/http/ngx_http_parse.c (revision 2410)
+++ src/http/ngx_http_parse.c (revision 2411)
@@ -1134,11 +1134,15 @@
#endif
case '/':
state = sw_slash;
- u -= 4;
- if (u < r->uri.data) {
- return NGX_HTTP_PARSE_INVALID_REQUEST;
- }
- while (*(u - 1) != '/') {
+ u -= 5;
+ for ( ;; ) {
+ if (u < r->uri.data) {
+...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première