Le 14 avril, Microsoft a émis une alerte de vulnérabilité , désormais connue sous le numéro CVE-2015-1635 , concernant un problème qui pourrait permettre l'exécution de code à distance si un attaquant envoie une requête HTTP spécialement conçue à un système Windows affecté. Si la mise à jour corrective immédiate de vos serveurs Windows de production n’est pas une option, NGINX et NGINX Plus peuvent vous aider à vous protéger contre les attaques.
Les détails spécifiques de la vulnérabilité n'ont pas été publiés au moment de la rédaction de cet article, mais les attaquants tenteraient apparemment de trouver des systèmes vulnérables en envoyant des requêtes HTTP avec des requêtes Range très volumineuses, ce qui peut déclencher un dépassement de mémoire tampon et provoquer un crash du système Windows.
Il est fortement conseillé aux utilisateurs d’appliquer le correctif de Microsoft pour corriger cette vulnérabilité. Cependant, si vous n'êtes pas en mesure d'appliquer le correctif à tous vos systèmes de production et que vous utilisez NGINX ou NGINX Plus pour équilibrer la charge ou acheminer le trafic vers eux, une simple modification de configuration suffit pour intercepter et corriger les demandes spéciales envoyées aux systèmes vulnérables.
Mattias Geniar a analysé le trafic d'attaque et rapporte que les requêtes HTTP avec une grande plage d'octets dans l'en-tête Range
déclenchent le crash :
GET / HTTP/1.1rnHôte : stuffrn
Plage : octets = 0-18446744073709551615rn
rn
La solution la plus simple consiste à utiliser la directive proxy_set_header
pour définir l'en-tête Range
sur ""
(la chaîne vide), ce qui supprime effectivement l'en-tête avant que la requête HTTP ne soit transmise au serveur Windows nommé par la directive proxy_pass
:
serveur { écouter 80 ;
emplacement / {
proxy_set_header Plage "" ;
proxy_pass http://windowsserver:80 ;
}
}
Si votre application nécessite la prise en charge d'une plage d'octets, vous pouvez utiliser la directive map
pour remplacer toute chaîne qui ressemble à un grand entier par la chaîne vide, avant d'utiliser la directive proxy_set_header
pour définir l'en-tête Range
:
map $http_range $saferange { "~d{10,}" ""; # si elle correspond à une chaîne de 10 entiers ou plus, supprimez-la
default $http_range;
}
server {
listen 80;
location / {
proxy_set_header Range $saferange;
proxy_pass http://windowsserver:80;
}
}
Alternativement, vous pouvez renvoyer le code HTTP444
lorsque la valeur dans l'en-tête Range
ressemble à un grand entier. Code444
demande à NGINX et NGINX Plus de fermer immédiatement la connexion client sans rien renvoyer.
serveur { écouter 80 ;
si ($http_range ~ "d{9,}") {
retourner 444 ;
}
emplacement / {
proxy_pass http://windowsserver:80 ;
}
}
Restez en sécurité et appliquez le correctif, mais si vous ne pouvez pas le faire immédiatement, NGINX et NGINX Plus peuvent vous aider à combler cette faille potentielle.
Pour essayer NGINX Plus, démarrez votre essai gratuit de 30 jours dès aujourd'hui ou contactez-nous pour une démo.
« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."