Mitmproxy, un service proxy HTTPS interactif open source, a corrigé un bogue dangereux qui permettait potentiellement aux attaquants d’organiser des attaques de contrebande de requêtes HTTP contre les serveurs principaux.
Les attaques de contrebande de requêtes HTTP exploitent les incohérences entre la manière dont les serveurs intermédiaires et principaux traitent les requêtes pour contourner les contrôles de sécurité, obtenir un accès non autorisé à des données sensibles ou compromettre d’autres utilisateurs de l’application.
Un bug insaisissable
Zhang Zeyu, le chercheur en sécurité qui a signalé le bogue, a découvert qu’un attaquant pouvait faire passer une requête/réponse via mitmproxy dans le corps du message HTTP d’une autre requête/réponse.
« Alors que les vecteurs d’attaque les plus évidents (par exemple, double Contenu-Longueur en-têtes, utilisation Contenu-Longueur terminé Transfert-Encodage) sont rares de nos jours, des écarts plus subtils par rapport à la norme laissent certaines configurations tout aussi vulnérables à la contrebande de demandes », a-t-il déclaré. La gorgée quotidienne.
Dans le cas de mitmproxy, un problème avec l’analyse des espaces blancs dans les noms d’en-tête a entraîné mitmproxy et un serveur en aval ayant éventuellement des interprétations différentes des en-têtes HTTP.
« Éliminer ce type de vulnérabilité est très délicat car vous avez besoin de différentes implémentations HTTP (proxy et serveur cible) pour vous mettre d’accord sur une interprétation commune des messages HTTP », a déclaré Maximilian Hils, le responsable de mitmproxy. La gorgée quotidienne.
Alternativement, vous pouvez faire en sorte que le proxy rejette les messages potentiellement malformés, mais cela aurait l’inconvénient d’imposer des problèmes de compatibilité avec les clients dans la nature, a déclaré Hils.
« Ce n’est pas un débordement de tampon, qui a une solution évidente. Il y a beaucoup de nuances ici pour s’assurer que l’intermédiaire et les serveurs sont d’accord », a-t-il déclaré.
HTTP/2 non affecté
Le bogue ne fonctionne que contre les services HTTP/1 derrière mitmproxy, qui représentent actuellement un très petit nombre de serveurs Web.
HTTP/2, le protocole le plus couramment utilisé, ne repose pas sur l’utilisation de Contenu-Longueur et Transfert-Encodage en-têtes pour déterminer où se termine le corps d’une requête.
Au lieu de cela, un champ de longueur intégré est inclus dans chaque trame de données, et lorsque les mandataires communiquent avec les backends à l’aide de HTTP/2, il y a peu d’ambiguïté sur la longueur de chaque message. Par conséquent, ce bogue particulier de contrebande de requêtes serait inefficace contre les services HTTP/2.
Les services HTTP/1 qui suivent le RFC7230 Les en-têtes de spécification et de rejet avec des espaces seraient également immunisés contre le bogue de contrebande de requêtes trouvé dans mitmproxy. Le bogue de sécurité serait également inutile pour les attaquants si l’application Web cible n’est pas vulnérable d’une autre manière.
« D’un point de vue pratique, je dirais que l’impact est inexistant pour la grande majorité des utilisateurs », a déclaré Hils. « Il y a beaucoup de conditions préalables pas si courantes qui doivent être remplies. Je dirais que pas mal d’étoiles doivent s’aligner pour que cela ait un impact réel dans la nature.
Cas de bord
Mais Zeyu a averti que de nombreux serveurs principaux ne prennent toujours pas en charge HTTP/2, y compris Gunicorn, qui dessert de nombreuses applications basées sur Python. Et dans de nombreux cas, les services prenant en charge HTTP/2 ne sont pas configurés pour l’utiliser entre le proxy frontal et les serveurs principaux simplement parce que la plupart des clients ne remarqueraient pas la différence, selon Zeyu.
« Cela signifie qu’il existe encore de nombreuses configurations de proxy Web et de serveur qui parlent HTTP/2 entre le client et le proxy, mais HTTP/1.x entre le proxy et le backend, ce qui laisse de la place pour que des attaques de contrebande de requêtes HTTP se produisent », il a dit.
Indépendamment du débat sur sa gravité, le insecte a été corrigé dans la version 8.0 de mitmproxy.