
Эксплойт-доказательство концепции для CVE-2024-28397 — обход песочницы в js2py, позволяющий удалённое выполнение кода через специально сформированный JavaScript, с динамическим исправлением.
js2py — популярный пакет Python, позволяющий выполнять код JavaScript внутри интерпретатора Python. Он используется различными парсерами веб-страниц для обработки JavaScript-кода на сайтах.
В реализации глобальных переменных в js2py существует уязвимость, которая может позволить атакующему получить ссылки на объекты Python в среде js2py, что, в свою очередь, даёт возможность выйти из окружения JS и выполнить произвольные команды на хосте.
Обычно пользователь вызывает js2py.disable_pyimport(), чтобы предотвратить выход JavaScript-кода из среды js2py. Однако с помощью этой уязвимости атакующий может обойти это ограничение и выполнить любую команду на хосте.
Злоумышленники могут размещать на сайтах вредоносные JS-файлы или отправлять вредоносные скрипты через HTTP API для их расшифровки жертвами. Таким образом, они могут выполнить удалённый код на хосте, запуская любые команды оболочки на целевом устройстве.
js2py не поддерживает Python 3.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 и исправление сейчас.