
PoC et correctif pour CVE-2024-28397 : évasion de sandbox dans js2py permettant l'exécution de code à distance (RCE) via la manipulation de références d'objets Python. Comprend les étapes de reproduction et un correctif dynamique.
js2py est un package Python populaire qui permet d'évaluer du code JavaScript dans l'interpréteur Python. Il est utilisé par divers scrappeurs web pour analyser le code JavaScript sur les sites web.
Il existe une vulnérabilité dans l'implémentation des variables globales au sein de js2py, qui pourrait permettre à un attaquant d'obtenir des références à des objets Python dans l'environnement js2py, lui permettant ainsi de sortir de l'environnement JS et d'exécuter des commandes arbitraires sur l'hôte.
Habituellement, l'utilisateur appelle js2py.disable_pyimport() pour empêcher le code JavaScript de quitter l'environnement js2py. Mais avec cette vulnérabilité, un attaquant peut contourner cette restriction et exécuter n'importe quelle commande sur l'hôte.
Des acteurs malveillants peuvent héberger des sites web contenant des fichiers JS malveillants ou envoyer des scripts malveillants via une API HTTP pour que les victimes les déchiffrent. Ce faisant, l'acteur peut effectuer une exécution de code à distance sur l'hôte en exécutant n'importe quelle commande shell sur la cible.
js2py ne supporte pas Python 3.12.pip install js2py pour installer js2py, puis exécuter poc.py, qui tentera d'exécuter head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; sur l'hôte.Success! the vulnerability exists... ou faire apparaître une calculatrice.Aucun correctif officiel n'est actuellement disponible. L'utilisateur peut utiliser fix.py pour patcher dynamiquement js2py, ou utiliser patch.txt pour corriger le code source.
J'ai découvert cette vulnérabilité en février et j'ai soumis une PR au dépôt officiel. Mais après cela, la PR a été oubliée et quatre mois se sont écoulés. J'ai donc décidé de publier le PoC et le correctif maintenant.