
Эксплойт класса Proof-of-Concept для CVE-2025-56015 — критической уязвимости обхода песочницы (sandbox escape) и внедрения кода в GenieACS, позволяющей выполнять произвольный JavaScript в контексте провижининга. Используя цепочку прототипов declare.constructor.constructor, злоумышленник может выйти за пределы ограниченного JavaScript-окружения, получить доступ к базовым модулям Node.js child_process и net и добиться полного удалённого выполнения кода (RCE).
Тип эксплойта: удалённый
Аутентификация: требуется сетевой доступ к NBI GenieACS (порт 7557) и ACS (порт 7547)
Воздействие: полная компрометация сервера, выполнение reverse shell, pivoting в сети
Конечная точка NBI на порту 7557 разрешает неаутентифицированный доступ для получения конфиденциальных данных. Примеры конечных точек API:
Получение данных пользователей:
$ curl 'http://myhost:7557/users/'
Ответ содержит конфиденциальную информацию, такую как хэши и соли паролей.
Получение списка файлов:
$ curl 'http://myhost:7557/files/'
Получение деталей провижининга:
$ curl 'http://myhost:7557/provisions/'
Кроме того, файлы можно загружать напрямую с файлового сервера (порт 7567) без аутентификации:
wget 'http://myhost:7567/SCR-20250623-qjoi.png'
Тестовая отладочная конечная точка внутри песочницы ограничивает прямой доступ к объекту Node.js process. Однако обойти это ограничение можно с помощью обхода объектов, а именно через цепочку конструкторов (например, constructor.constructor).
Вызывая её на доступных объектах (например, declare), злоумышленники могут выйти из контекста песочницы и получить доступ к глобальному объекту process. Это даёт возможность читать переменные окружения и выполнять произвольные команды.
RCE после аутентификации:
Скрипты провижининга можно выполнять напрямую через конечную точку API /api/devices/{device_id}/tasks для получения shell. Запросы, отправленные только через NBI, ставятся в очередь, но не выполняются немедленно.
RCE до аутентификации (неаутентифицированный RCE): Используя NBI API, злоумышленник может создавать provisions и presets без аутентификации. Preset служит для автоматического запуска скриптов провижининга, когда устройство отправляет событие через интерфейс CWMP.
Шаги эксплуатации:
PUT /provisions/{provision_name}.PUT /presets/{preset_name} (привязав его к событию, например "Periodic").declare.constructor.constructorПеред запуском эксплойта обновите конфигурации ACS_URL, NBI_URL, LHOST и LPORT непосредственно в exploit.py, чтобы они соответствовали вашему окружению и настройкам машины атакующего.
# Start listener on your attacker machine
nc -lvnp 4444
# Run the exploit
python3 exploit.py

requests (pip install requests)Этот код предоставлен исключительно для образовательных целей и санкционированного тестирования безопасности.
Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, является незаконным и неэтичным.
Уязвимости обнаружены, эксплойт разработан:
Из Datafarm Co., Ltd.
Разработано DF Pentest Team • Таиланд