
CVE-2024-28397: escape del sandbox de js2py, evasión de la restricción de pyimport.
js2py es un paquete popular de Python que puede evaluar código JavaScript dentro del intérprete de Python. Es utilizado por varios scrapers web para analizar código JavaScript en el sitio web.
Existe una vulnerabilidad en la implementación de una variable global dentro de js2py, que permite a un atacante obtener una referencia a un objeto de Python en el entorno de js2py, lo que le permite escapar del entorno JS y ejecutar comandos arbitrarios en el host.
Normalmente, un usuario llamaría a js2py.disable_pyimport() para evitar que el código JavaScript escape del entorno de js2py. Pero con esta vulnerabilidad, un atacante puede evadir esta restricción y ejecutar cualquier comando en el host objetivo.
El actor de amenaza puede alojar un sitio web que contenga un archivo JavaScript malicioso o enviar un script malicioso a través de una API HTTP para que la víctima lo analice. Al hacerlo, el actor puede ejecutar código de forma remota en el host ejecutando cualquier comando de shell en el objetivo.
js2py no soporta Python 3.12.pip install js2py para instalar js2py y ejecutar poc.py, que intentará ejecutar head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; en el host.Success! the vulnerability exists... o mostrar la calculadora.Actualmente, no hay una solución oficial disponible; los usuarios pueden usar fix.py para parchear dinámicamente js2py o usar patch.txt para corregir el código fuente.
Encontré esta vulnerabilidad en febrero y envié un PR al repositorio oficial. Pero después de eso, el PR fue olvidado y después de que pasaron cuatro meses, decidí publicar el PoC y la solución ahora.