Vulnérabilité dans le mode transparent des serveurs proxy
Date : 04 Mars 2009
Cette vulnérabilité impacte uniquement les serveurs proxy configurés en mode transparent. Ce mode est peu utilisé.
Rappel sur les serveurs proxy
Les serveurs proxy (serveurs de relayage ou serveurs mandataires) sont des serveurs qui relaient des requêtes entre des postes clients d'un réseau local et des serveurs externes à ce réseau. Ils peuvent relayer différents protocoles mais relaient essentiellement des échanges basés sur le protocole http/HTTPS (proxy HTTP) afin de permettre à des utilisateurs de se connecter à Internet en leur offrant les fonctionnalités suivantes :
- mémorisation en mémoire cache des pages web les plus fréquemment consultées,
- filtrage des requêtes,
- journalisation des requêtes,
- identification et authentification des utilisateurs,
- …..
Un serveur proxy configuré en mode transparent relaie les connexions indépendamment de toute interaction des utilisateurs ou de la configuration des navigateurs.
Un serveur proxy peut également être utilisé pour permettre à des
utilisateurs d'Internet de se connecter à des serveurs internes. On parle alors
de reverse-proxy ou de proxy en mode "reverse".
Le champ "host" des en-têtes HTTP
La RFC 2616 définit le champ "host" des en-têtes HTTP afin que les requêtes puissent spécifier le serveur Internet et le numéro de port de la ressource demandée.
Ce champ est obligatoire et son absence provoque le rejet de la requête avec le code d'erreur 400 (Bad Request).
Nota : Si le numéro de port n'est pas défini alors c'est le numéro par
défaut du service demandé qui est utilisé (80 pour HTTP par exemple).
La vulnérabilité
Ce mois-ci une vulnérabilité relative aux serveurs proxy de différents distributeurs a été signalée par l'US-CERT. Elle est suivie par la faille en cours d'investigation du Cert-IST FA-2009.0041.
Elle concerne uniquement les serveurs proxy configurés en mode transparent et qui relaient les requêtes HTTP en se basant sur le champ d'en-tête HTTP "host" au lieu de se baser sur les adresses IP source et destination des requêtes.
Une personne malveillante, capable de construire (forger) des requêtes HTTP, peut en effet se connecter à tous les sites web auxquels un serveur proxy vulnérable a accès, en construisant une requête HTTP avec un champ "host" spécifiquement renseigné.
Un attaquant distant peut exploiter cette vulnérabilité, via du contenu web actif (JavaScript, Flash, …), pour accéder à des sites internes normalement non accessibles depuis Internet. Il doit pour cela déposer ce contenu actif sur un site web malveillant ou compromis et inciter sa victime à le consulter. Puis, lorsque celle-ci télécharge ce contenu actif en navigant à travers un proxy transparent, ce contenu peut alors leurrer le proxy vulnérable en modifiant le champ "host" des requêtes afin d'accéder à n'importe quel site auquel le proxy a accès.
Nota : Cette vulnérabilité n'impacte pas les serveurs proxy configurés en
mode "reverse".
Solutions
Plusieurs serveurs proxy, dont Squid et ProxySG de BlueCoat qui sont suivis par le Cert-IST, sont vulnérables.
A ce jour, aucun éditeur ne propose de correctif.
Le Cert-IST publiera un avis de sécurité lors de la parution de correctifs officiels pour les serveurs proxy qu'il suit.
Dans cette attente, il est possible pour les administrateurs réseau de réduire le niveau de risque lié à cette vulnérabilité :
- en limitant l'accès aux services internes aux personnes identifiées,
- en limitant les connexions entre le serveur proxy et les services internes.
- en limitant l'utilisation de protocoles de communication et de ports TCP.
Les utilisateurs peuvent quant à eux limiter l'utilisation de contenus web actifs (JavaScript, Flash, …) aux seuls sites de confiance.
Pour en savoir plus
- Note de vulnérabilité de l'US-CERT : http://www.kb.cert.org/vuls/id/435052
- Définition du champ "host" dans la RFC2616 : http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23
- Faille en cours d'investigation du Cert-IST : FA-2009.0041