
CVE-2024-28397 : évasion de la sandbox js2py, contournement de la restriction pyimport.
js2py est un package python populaire qui peut évaluer du code javascript à l'intérieur de l'interpréteur python. Il est utilisé par divers web scrapers pour analyser le code javascript sur le site web.
Il existe une vulnérabilité dans l'implémentation d'une variable globale dans js2py, permettant à un attaquant d'obtenir une référence à un objet python dans l'environnement js2py, ce qui permet à l'attaquant de s'échapper de l'environnement JS et d'exécuter des commandes arbitraires sur l'hôte.
Normalement, un utilisateur appellerait js2py.disable_pyimport() pour empêcher le code JavaScript de s'échapper de 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 cible.
L'acteur malveillant peut héberger un site web contenant un fichier JavaScript malveillant ou envoyer un script malveillant via une API HTTP pour que la victime l'analyse. 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 python3.12.pip install js2py pour installer js2py et exécutez 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 la calculatrice.Actuellement, aucun correctif officiel n'est disponible, les utilisateurs peuvent 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 après quatre mois, j'ai décidé de publier le PoC et le correctif maintenant.