Nel pacchetto Python Js2Py, scaricato 1,2 milioni di volte il mese scorso, è stata scoperta una vulnerabilità (CVE-2024-28397) che consente di eludere l'isolamento della sandbox e di eseguire codice nel sistema durante l'elaborazione di dati appositamente formattati in JavaScript. Questa vulnerabilità può essere sfruttata per attaccare applicazioni che utilizzano Js2Py per eseguire codice JavaScript. La correzione è attualmente disponibile solo in forma di patch. Un prototipo di exploit è stato preparato per verificare la possibilità di attacco.
Il pacchetto Js2Py implementa un interprete e un traslatore JavaScript, consentendo di eseguire codice JavaScript in un ambiente isolato macchina virtuale o di tradurre JavaScript in un rappresentazione nel linguaggio Python. Il progetto è interamente scritto in Python e non utilizza motori JavaScript di terze parti. Nella pratica, la libreria è utilizzata in vari web crawler, sistemi di download e analizzatori di siti web che supportano l'elaborazione di contenuti generati dal codice JavaScript.
Tra le applicazioni che sono influenzate dalla vulnerabilità si segnalano Lightnovel Crawler (uno strumento per scaricare libri da servizi online e salvarli in vari formati per la lettura offline), cloudscraper (che elude automaticamente le pagine protette da bot utilizzate nel CDN Cloudflare) e pyLoad (un gestore di download che supporta l'elaborazione di pagine generate in JavaScript). Durante l'elaborazione di contenuti JavaScript appositamente formattati in queste applicazioni, un aggressore può riuscire a eseguire codice arbitrario a livello di sistema.
La vulnerabilità è presente nell'implementazione della variabile globale all'interno di js2py, che permette di ottenere un riferimento a un oggetto Python dal codice JavaScript in esecuzione nell'ambiente isolato, nonostante la chiamata al metodo js2py.disable_pyimport() per disabilitare l'importazione di oggetti Python. Per eseguire codice arbitrario nel sistema, un attaccante può sfruttare la vulnerabilità per ottenere accesso all'oggetto Popen dal modulo Python subprocess. È interessante notare che la modifica per risolvere la vulnerabilità è stata inviata nel progetto Js2Py il primo marzo, ma non è stata ancora accettata dopo tre mesi e mezzo.
Fonte: opennet.ru
