
Prueba de concepto del exploit para CVE-2024-28397, una evasión de sandbox en js2py que permite la ejecución remota de código mediante JavaScript manipulado, con un parche dinámico de corrección.
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 sitios web.
Existe una vulnerabilidad en la implementación de variables globales dentro de js2py, que podría permitir a un atacante obtener referencias a objetos de Python en el entorno de js2py, permitiéndole así salir del entorno JS y ejecutar comandos arbitrarios en el host.
Normalmente, el usuario llamará a js2py.disable_pyimport() para evitar que el código JavaScript salga del entorno js2py. Pero con esta vulnerabilidad, un atacante puede eludir esta restricción y ejecutar cualquier comando en el host.
Los actores de amenazas pueden alojar sitios web que contengan archivos JS maliciosos o enviar scripts maliciosos a través de HTTP API para que las víctimas los descifren. Al hacerlo, el actor puede realizar una ejecución remota de código 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 una calculadora.Actualmente no hay una solución oficial disponible, el usuario puede usar fix.py para aplicar un parche dinámico a 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 quedó olvidado y pasaron cuatro meses, por lo que decidí publicar el PoC y la solución ahora.