
PoC e fix per CVE-2024-28397: fuga dalla sandbox in js2py che consente RCE tramite manipolazione di riferimenti a oggetti Python. Include passaggi di riproduzione e patch dinamica.
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.
C'è una vulnerabilità nell'implementazione delle variabili globali all'interno di js2py che potrebbe permettere a un attaccante di ottenere riferimenti a oggetti Python nell'ambiente js2py, consentendo così di uscire dall'ambiente JS ed eseguire comandi arbitrari sul sistema host.
Tipicamente, l'utente chiamerà js2py.disable_pyimport() per impedire al codice JavaScript di uscire dall'ambiente js2py. Ma con questa vulnerabilità, un attaccante può aggirare questa restrizione ed eseguire qualsiasi comando sull'host.
Gli attori delle minacce possono ospitare siti web contenenti file JS malevoli o inviare script dannosi tramite API HTTP per farli decifrare alle vittime. In questo modo, l'attore può eseguire codice in remoto sull'host eseguendo qualsiasi comando shell sul bersaglio.
js2py non supporta Python 3.12.pip install js2py per installare js2py ed eseguire poc.py, che tenterà di eseguire head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; sull'host.Success! the vulnerability exists... o aprire una calcolatrice.Al momento non è disponibile una correzione ufficiale; l'utente può 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. Ma dopo, la PR è stata dimenticata e sono passati quattro mesi, quindi ho deciso di rilasciare ora il PoC e la correzione.