
CVE-2024-28397: bypass della sandbox di js2py, elusione della restrizione pyimport.
js2py è un popolare pacchetto Python che consente di valutare codice JavaScript all'interno dell'interprete Python. Viene utilizzato da vari scraper web per analizzare il codice JavaScript presente sui siti web.
Esiste una vulnerabilità nell'implementazione di una variabile globale all'interno di js2py che permette a un attaccante di ottenere un riferimento a un oggetto Python nell'ambiente js2py, consentendogli così di uscire dall'ambiente JS ed eseguire comandi arbitrari sull'host.
Normalmente, un utente chiamerebbe js2py.disable_pyimport() per impedire al codice JavaScript di fuoriuscire dall'ambiente js2py. Ma con questa vulnerabilità, un attaccante può eludere questa restrizione ed eseguire qualsiasi comando sull'host di destinazione.
L'attaccante può ospitare un sito web contenente un file JavaScript malevolo o inviare uno script dannoso tramite API HTTP per farlo analizzare dalla vittima. In questo modo, può eseguire codice in remoto sull'host eseguendo qualsiasi comando shell sulla macchina bersaglio.
js2py non supporta Python 3.12.pip install js2py per installare js2py e poi eseguire poc.py, che tenterà di eseguire head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; sull'host.Success! the vulnerability exists... o far apparire la calcolatrice.Al momento non è disponibile una correzione ufficiale; gli utenti possono usare fix.py per applicare una patch dinamica a js2py o usare patch.txt per correggere il codice sorgente.
Ho scoperto questa vulnerabilità a Febbraio e ho inviato una PR al repository ufficiale. Dopo di che, la PR è stata dimenticata e, passati quattro mesi, ho deciso di rilasciare ora il PoC e la correzione.