
CVE-2024-28397: побег из песочницы js2py, обход ограничения pyimport.
js2py — популярный пакет Python, который может выполнять код JavaScript внутри интерпретатора Python. Он используется различными веб-скраперами для анализа JavaScript-кода на веб-сайте.
В реализации глобальной переменной внутри js2py существует уязвимость, позволяющая атакующему получить ссылку на объект Python в среде js2py, что даёт возможность выйти за пределы JS-среды и выполнить произвольные команды на хосте.
Обычно пользователь вызывает js2py.disable_pyimport(), чтобы не дать JavaScript-коду выйти за пределы среды js2py. Но с помощью этой уязвимости атакующий может обойти это ограничение и выполнить любую команду на целевом хосте.
Злоумышленник может разместить веб-сайт, содержащий вредоносный JavaScript-файл, или отправить вредоносный скрипт через HTTP API для обработки жертвой. Таким образом, он может совершить удалённое выполнение кода на хосте, выполнив любую команду оболочки на целевой системе.
js2py не поддерживает python3.12.pip install js2py для установки js2py и запустите poc.py, который попытается выполнить head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; на хосте.Success! the vulnerability exists... или открыть калькулятор.На данный момент официальное исправление недоступно; пользователи могут использовать fix.py для динамического патча js2py или использовать patch.txt для исправления исходного кода.
Я обнаружил эту уязвимость в феврале и отправил PR в официальный репозиторий. Но после этого о PR забыли, и спустя четыре месяца я решил опубликовать PoC и исправление.