
CVE-2024-28397: js2py-Sandbox-Escape, Umgehung der pyimport-Beschränkung.
js2py ist ein beliebtes Python-Paket, das JavaScript-Code innerhalb des Python-Interpreters ausführen kann. Es wird von verschiedenen Web-Scraping-Tools verwendet, um JavaScript-Code auf Websites zu parsen.
Es existiert eine Schwachstelle in der Implementierung einer globalen Variable innerhalb von js2py, die es einem Angreifer ermöglicht, eine Referenz auf ein Python-Objekt in der js2py-Umgebung zu erhalten, wodurch der Angreifer die JS-Umgebung verlassen und beliebige Befehle auf dem Host ausführen kann.
Normalerweise würde ein Benutzer js2py.disable_pyimport() aufrufen, um zu verhindern, dass JavaScript-Code die js2py-Umgebung verlässt. Mit dieser Schwachstelle kann ein Angreifer diese Einschränkung umgehen und beliebige Befehle auf dem Zielhost ausführen.
Der Bedrohungsakteur kann eine Website hosten, die eine bösartige JavaScript-Datei enthält, oder ein bösartiges Skript über eine HTTP-API senden, das vom Opfer geparst wird. Dadurch kann der Akteur eine Remotecodeausführung auf dem Host durchführen, indem er beliebige Shell-Befehle auf dem Ziel ausführt.
js2py Python 3.12 nicht.pip install js2py aus, um js2py zu installieren, und führen Sie poc.py aus, das versucht, head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; auf dem Host auszuführen.Success! the vulnerability exists... ausgeben oder einen Taschenrechner öffnen.Derzeit ist kein offizieller Fix verfügbar. Benutzer können fix.py verwenden, um js2py dynamisch zu patchen, oder patch.txt verwenden, um den Quellcode zu reparieren.
Ich habe diese Schwachstelle im Februar gefunden und einen PR an das offizielle Repository eingereicht. Danach wurde der PR jedoch vergessen, und nach vier Monaten habe ich mich entschlossen, den PoC und den Fix jetzt zu veröffentlichen.