Une vulnérabilité (CVE-2023-38545) a été identifiée dans l'utilitaire curl pour l'envoi et la réception de données sur le réseau et la bibliothèque libcurl en développement, qui peut entraîner un débordement de tampon et potentiellement l'exécution de code malveillant de l'attaquant côté client lors de l'accès via l'utilitaire curl ou une application utilisant libcurl à un serveur HTTPS contrôlé par un cybercriminel. Le problème ne se manifeste que lorsque l'accès via un proxy SOCKS5 est activé dans curl. Lors d'un accès direct sans proxy, la vulnérabilité ne se produit pas. La vulnérabilité a été corrigée dans la version curl 8.4.0. Le chercheur en sécurité ayant identifié l'erreur a reçu une récompense de 4660 $ dans le cadre de l'initiative Internet Bug Bounty sur Hackerone.
La vulnérabilité est causée par une erreur dans le code de résolution de nom d'hôte avant un accès au proxy SOCKS5. Pour les noms d'hôte jusqu'à 256 caractères, curl envoie immédiatement le nom au proxy SOCKS5 pour résolution de son côté, tandis que pour les noms plus longs que 255 caractères, il bascule vers le résolveur local et envoie à SOCKS5 une adresse déjà déterminée. En raison d'une erreur dans le code, le drapeau indiquant qu'une résolution locale est nécessaire a pu être réglé sur la mauvaise valeur lors de l'établissement lent d'une connexion via SOCKS5, entraînant l'écriture d'un long nom d'hôte dans le tampon prévu pour la taille. adresses IP ou d'un nom ne dépassant pas 255 caractères.
Le propriétaire du site auquel curl accède via un proxy SOCKS5 peut initier un débordement de tampon côté client en renvoyant un code de redirection de requête (HTTP 30x) et en définissant dans l'en-tête « Location: » une URL dont le nom d'hôte a une taille comprise entre 16 et 64 Ko (la valeur de 16 Ko étant le minimum requis pour provoquer un débordement du tampon alloué et la valeur de 65 Ko étant liée à la longueur maximale autorisée pour un nom d'hôte dans une URL). Si la redirection des requêtes est autorisée dans les paramètres de libcurl et que le proxy SOCKS5 utilisé est suffisamment lent, le long nom d'hôte sera écrit dans un petit tampon dont la taille est manifestement insuffisante.
La vulnérabilité touche principalement les applications basées sur libcurl et se manifeste dans l'utilitaire curl uniquement lorsque l'option « —limit-rate » est utilisée avec une valeur inférieure à 65541 — dans libcurl, un tampon de 16 Ko est alloué par défaut, tandis que dans l'utilitaire curl, il est de 100 Ko, mais cette taille varie en fonction de la valeur du paramètre « —limit-rate ».
Daniel Stenberg, l'auteur du projet, a mentionné que la vulnérabilité était passée inaperçue pendant 1315 jours. Il a également été dit que 41 % des vulnérabilités précédemment identifiées dans curl auraient probablement pu être évitées si curl avait été écrit dans un langage garantissant une gestion sécurisée de la mémoire, mais la réécriture de curl dans un autre langage n'est pas prévue dans un avenir proche. Comme mesures pour renforcer la sécurité de la base de code, il est proposé d'élargir les outils pour tester le code et d'utiliser plus activement les dépendances écrites dans des langages de programmation garantissant une gestion sécurisée de la mémoire. Une éventuelle substitution progressive de certaines parties de curl par des alternatives écrites dans des langages sûrs, comme le backend HTTP expérimental Hyper, développé en Rust, est également envisagée.
Source : opennet.ru
