- Article sur la faille de sécurité critique CVE-2023-38545 découverte dans curl 8.4.0, considérée comme le problème de sécurité le plus grave de curl depuis longtemps
- Le problème est un dépassement de tas, causé par un défaut dans la fonction de connexion à un proxy SOCKS5
- Cette faille a été introduite au début de 2020, lorsque la fonction a été convertie d’un appel bloquant en une machine à états non bloquante, afin d’améliorer les performances des transferts massivement parallèles via SOCKS5
- Le défaut se situe dans l’état INIT de la machine à états, où une variable locale est définie et où curl décide s’il doit résoudre l’hôte localement ou transmettre le nom au proxy. Si le nom d’hôte est trop long, le code bascule en mode de résolution locale, ce qui peut provoquer un dépassement mémoire si le nom d’hôte est plus long que le tampon cible
- Le dépassement peut se produire si la taille du tampon est définie à moins de 65541 octets et que le nom d’hôte est plus long que la taille du tampon. Cela exige qu’un acteur malveillant fournisse un nom d’hôte extrêmement long pour déclencher la faille
- Un attaquant qui contrôle un serveur HTTPS auquel un client utilisant libcurl accède via un proxy SOCKS5 peut provoquer un dépassement du tampon du tas en renvoyant à l’application une redirection manipulée via une réponse HTTP 30x
- Le problème a été corrigé dans curl 8.4.0 en faisant renvoyer une erreur par curl lorsque le nom d’hôte est trop long, au lieu de basculer de la résolution distante à la résolution locale. Un cas de test dédié a également été ajouté pour ce scénario
- L’auteur reconnaît que cette faille ne se serait pas produite si curl avait été écrit dans un langage sûr du point de vue mémoire plutôt qu’en C, mais indique qu’un portage complet vers un autre langage n’est pas prévu actuellement
- L’auteur suggère qu’une approche viable consiste à autoriser, utiliser et soutenir davantage de dépendances écrites dans des langages sûrs du point de vue mémoire, et qu’il pourrait être possible de remplacer progressivement certaines parties de curl
- L’auteur reconnaît son erreur et présente ses excuses, en indiquant que cette faille aurait pu être détectée avec une meilleure suite de tests. Il mentionne également les analyseurs statiques de code qui n’ont pas repéré le problème dans cette fonction
- L’auteur conclut qu’expédier un dépassement de tas dans un code installé sur plus de 20 milliards d’instances n’est pas une expérience qu’il recommande
1 commentaires
Avis Hacker News