
PoC und Fix für CVE-2024-28397: Sandbox Escape in js2py, der RCE durch Manipulation von Python-Objektverweisen ermöglicht. Enthält Reproduktionsschritte und dynamischen Patch.
js2py ist ein beliebtes Python-Paket, das JavaScript-Code innerhalb des Python-Interpreters auswerten kann. Es wird von verschiedenen Web-Scraping-Tools verwendet, um JavaScript-Code auf Websites zu parsen.
Es gibt eine Schwachstelle in der Implementierung globaler Variablen in js2py, die es einem Angreifer ermöglichen könnte, Referenzen auf Python-Objekte in der js2py-Umgebung zu erhalten. Dadurch kann der Angreifer die JS-Umgebung verlassen und beliebige Befehle auf dem Host ausführen.
Normalerweise ruft der Benutzer js2py.disable_pyimport() auf, um zu verhindern, dass der JavaScript-Code die js2py-Umgebung verlässt. Mit dieser Schwachstelle kann ein Angreifer diese Einschränkung umgehen und jeden Befehl auf dem Host ausführen.
Bedrohungsakteure können Websites hosten, die bösartige JS-Dateien enthalten, oder bösartige Skripte über HTTP-API senden, damit Opfer sie entschlüsseln. Auf diese Weise kann der Akteur eine Remote-Codeausführung auf dem Host durchführen, indem er beliebige Shell-Befehle auf dem Ziel ausführt.
js2py Python3.12 nicht.pip install js2py aus, um js2py zu installieren, und führe poc.py aus. Dies 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 keine offizielle Behebung verfügbar. Der Benutzer kann 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 vergessen, und nach vier Monaten habe ich beschlossen, den PoC und die Behebung jetzt zu veröffentlichen.