Skip to main content

La bibliothèque Python populaire urllib3 touchée par une vulnérabilité de déni de service

Écrit par
Headshot of Hayley Denbraver

Hayley Denbraver

Python feature

9 mars 2020

0 minutes de lecture

Urllib3, un client HTTP Python puissant et populaire, est touché par une nouvelle vulnérabilité de déni de service. Urllib3 est utilisé dans tout l’écosystème Python : plus de 1 200 packages le répertorient parmi leurs dépendances, notamment des packages populaires comme requests, selenium, kubernetes et bien d’autres. Si vous avez un projet Python, il est fort probable que vous utilisiez urllib3.

L’année dernière, nous avons signalé une vulnérabilité d’injection CRLF dans urllib3.

Vulnérabilité de déni de service

Dans la version 1.25.2, une logique a été ajoutée à util/url.py pour encoder en pourcentage les caractères non valides de la cible de la requête. La méthode _encode_invalid_chars, telle qu’elle a été écrite, permet une attaque par déni de service. Le tableau percent_encodings contient toutes les correspondances d’encodages en pourcentage, sans éliminer les doublons. Pour une URL de longueur N, la taille de percent_encodings entraîne un temps d’exécution linéaire. L’étape suivante (la normalisation des octets déjà encodés en pourcentage) prend également un temps linéaire pour chaque encodage en pourcentage, ce qui donne un temps d’exécution polynomial (O(n2)). Cette inefficacité pourrait être délibérément exploitée pour consommer du processeur et provoquer un déni de service. Si les doublons étaient éliminés de percent_encodings, le temps de calcul de _encode_invalid_chars correspondrait à un temps d’exécution linéaire, plus efficace.

La méthode vulnérable a été mise à jour dans la version 1.25.8 afin d’être plus efficace. Elle n’est désormais plus vulnérable à cette attaque par déni de service.

Mon projet est-il vulnérable ?

Étant donné qu’urllib3 est largement utilisé dans l’écosystème Python, il est recommandé de vérifier si vos projets Python utilisent les versions vulnérables. Pour résoudre le problème, mettez à jour urllib3 vers la dernière version disponible (1.25.8). De nombreux packages Python dépendant d’urllib3, il est probable que la vulnérabilité soit présente dans votre projet en tant que dépendance indirecte. Selon votre dépendance de premier niveau, vous ne pourrez peut-être pas la mettre à jour dans tous les cas.

Snyk facilite la vérification de vos dépendances Python. Notre offre gratuite comprend des analyses illimitées des projets open source et 200 analyses par mois des dépôts privés. Snyk a récemment amélioré la prise en charge de Python dans Snyk Open Source, afin que les développeurs puissent corriger les vulnérabilités de leurs dépendances grâce à des pull requests de correction automatisées. Analysez votre projet dès aujourd’hui !

Snyk adore Python

Chez Snyk, nous aimons l’open source et voulons contribuer à le préserver au mieux. Dans cette optique, nous signalons les nouvelles vulnérabilités non pas parce que les packages sont mauvais (ils ne le sont pas), mais parce que nous voulons aider les développeurs à utiliser les logiciels open source en toute sécurité. Nous voulons aussi aider les personnes qui ont découvert de nouvelles vulnérabilités à les signaler de manière responsable. Vous pouvez divulguer les vulnérabilités que vous avez découvertes ou signaler celles qui ne figurent pas dans la Snyk Vulnerability Database, et nous vous aiderons à vérifier la vulnérabilité et à contacter le responsable de la maintenance. Pour en savoir plus, cliquez ici.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis de capture du drapeau en regardant à la demande notre atelier virtuel d’initiation.