← volver
CVE-2025-47812criticalbajo ataqueCWE-158

CVE-2025-47812

100Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 10epss 95%
de la publicación al arma0 días
Publicada en NVD10 jul
1ª PoC1 jul
metasploit19 jun
CISA KEV+4d
probabilidad de explotación
95%top 1% de las CVE
explotación observada
CISA + VulnCheck
35 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2025-08-04

Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.

Resumen

Falha crítica no Wing FTP Server que permite a um atacante remoto executar comandos arbitrários com privilégios de root (Linux) ou SYSTEM (Windows) — o nível máximo de comprometimento possível para esse serviço. O ponto crítico que a nota do CVSS 10.0 não deixa claro: a exploração exige apenas um nome de usuário válido, e contas anônimas (comuns em servidores FTP mal configurados) servem perfeitamente para isso, o que torna a falha efetivamente pré-autenticação em muitos ambientes.

Detalle técnico

A raiz do problema (CWE-158, Improper Neutralization of Null Byte) está em loginok.html, o script Lua que processa autenticação nas interfaces web de usuário e de administração. O parâmetro username é passado para c_CheckUser(), função implementada no binário nativo wftpserver. Internamente, a string chega via lua_tolstring (que preserva o byte nulo e tudo depois dele), mas é em seguida copiada para um objeto CStdStr através de uma chamada que usa std::string::assign — e essa rotina usa strlen() para calcular o tamanho da string. strlen() para no primeiro \0, então a verificação de credenciais só considera o trecho antes do byte nulo.

Resultado: se existir um usuário cujo nome coincide com o trecho antes do \0 — inclusive 'anonymous', se contas anônimas estiverem habilitadas — a autenticação é aprovada, independentemente do que vem depois do byte nulo. O problema é que o restante da string (username completo, incluindo tudo após o \0) não é descartado em outro ponto do fluxo: ele é usado para montar o arquivo de sessão, que é serializado em disco como código Lua no formato _SESSION['username']=[[valor]]. Como o atacante controla integralmente o conteúdo pós-\0, ele pode injetar ']]' para fechar prematuramente o literal Lua, seguido de instruções Lua arbitrárias, terminando com '--' para comentar a sintaxe residual e manter o arquivo sintaticamente válido.

Esse arquivo de sessão (.lua, salvo com nome de 64 caracteres hexadecimais no diretório session/) é interpretado — não apenas lido como dado — na próxima requisição que o servidor processa para aquela sessão, seja em dir.html ou qualquer outra página do fluxo autenticado. Nesse momento o código Lua injetado é executado no contexto do processo do servidor, e como Lua tem acesso a io.popen(), o atacante obtém execução de comando no sistema operacional subjacente com os privilégios do serviço FTP.

Cómo se explota

O vetor é uma requisição HTTP POST para o endpoint loginok.html, com o campo username contendo um nome de usuário válido seguido de %00 (byte nulo) e o payload Lua malicioso. O único pré-requisito de autenticação é conhecer o nome de um usuário existente — não a senha dele — e, na prática mais grave, uma conta anônima habilitada (comum em servidores FTP de compartilhamento público) já é suficiente, tornando o ataque efetivamente sem autenticação real. Depois do login malformado, uma segunda requisição qualquer (a qualquer página que carregue a sessão) dispara a deserialização do arquivo de sessão e a execução do código Lua injetado.

A complexidade técnica de descoberta foi alta — exigiu análise binária com debugger (Binary Ninja) para entender a discrepância entre lua_tolstring e strlen() — mas a exploração em si, uma vez conhecida, é trivial e determinística. A vulnerabilidade foi divulgada publicamente por Julien Ahrens (RCE Security) em 30 de junho de 2025, com escrita técnica completa do mecanismo. A Huntress observou exploração ativa em cliente já em 1º de julho de 2025 — um dia depois da publicação —, e a CISA incluiu a falha no catálogo KEV em 14/07/2025 com prazo de correção em 04/08/2025.

Em campanhas observadas, o payload Lua injetado decodifica uma string hexadecimal em um comando (via io.popen) que baixa e executa um binário adicional a partir de infraestrutura remota do atacante — ou seja, o RCE inicial é usado como estágio de entrega para carga secundária. O resultado final é controle total do processo do servidor e, por consequência, do host, dado que o serviço roda por padrão como root ou SYSTEM.

Versiones

Afectadas
Wing FTP Server anterior à versão 7.4.4 (todas as versões before 7.4.4, conforme descrição oficial do fornecedor).
Corregidas en
Wing FTP Server 7.4.4 e posteriores.

Cómo protegerse

A correção do fornecedor está na versão 7.4.4, que trata corretamente o byte nulo no processamento do username e impede a injeção no arquivo de sessão. Atualizar é a única mitigação completa confirmada pelas fontes.

Como paliativo parcial quando a atualização não é imediata: desabilitar contas de acesso anônimo reduz a superfície de ataque não autenticado, mas não elimina a vulnerabilidade — qualquer conta válida (mesmo com senha correta desconhecida pelo atacante, já que a senha não é verificada no bypass) ainda permite exploração. Restringir o acesso de rede às interfaces web de usuário e administração (firewall, segmentação, VPN) impede a exploração remota, ao custo de limitar o acesso legítimo remoto ao painel.

Não há indicação nas fontes de que regra de WAF genérica bloqueie a falha de forma confiável, dado que o payload pode ser ofuscado/variado dentro do campo username; tratar isso como mitigação suficiente é o mito a evitar aqui. A atualização de versão continua sendo o único controle validado.

Cómo detectar

Nos logs do Wing FTP, em Log\Domains\\AAAA-M-D.log, uma tentativa de exploração aparece truncada de forma anômala: em vez da linha normal 'User 'usuario' logged in ok! (IP:x.x.x.x)', a entrada de log é cortada no meio, por exemplo 'User 'anonymous' sem aspa de fechamento e sem o restante da linha — evidência direta de que um byte nulo interrompeu a escrita do log. Isso ocorre tanto em tentativas de login que falham quanto nas que exploram a falha com sucesso, então deve ser cruzado com outros sinais.

A evidência mais confiável está nos próprios arquivos de sessão: no diretório session/ do Wing FTP, arquivos .lua com nome de 64 caracteres hexadecimais que sejam anormalmente grandes (uma sessão legítima contém apenas três linhas curtas com username, ipaddress e currentpath) indicam código Lua injetado — inclusive chamadas a io.popen e funções de decodificação hexadecimal do payload. Monitorar processos filhos inesperados gerados pelo processo do servidor (WFTPServer.exe no Windows, ou o processo equivalente no Linux), como cmd.exe, powershell ou shells, também é sinal forte de exploração já concretizada.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
In Wing FTP Server before 7.4.4. the user and admin web interfaces mishandle '\0' bytes, ultimately allowing injection of arbitrary Lua code into user session files. This can be used to execute arbitrary system commands with the privileges of the FTP service (root or SYSTEM by default). This is thus a remote code execution vulnerability that guarantees a total server compromise. This is also exploitable via anonymous FTP accounts.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
PoCs públicas encontradas35
exploitdbwww.exploit-db.com/exploits/52347no verificadogithubgithub.com/4m3rr0r/CVE-2025-47812-poc55githubgithub.com/0xcan1337/CVE-2025-47812-poC13githubgithub.com/0xgh057r3c0n/CVE-2025-478123githubgithub.com/shadowgit30/CVE-2025-478122githubgithub.com/r0otk3r/CVE-2025-478122githubgithub.com/estebanzarate/CVE-2025-47812-Wing-FTP-Server-7.4.3-Unauthenticated-RCE-PoC2githubgithub.com/blindma1den/CVE-2025-478121githubgithub.com/0xjuarez/CVE-2025-478121githubgithub.com/Majdae/CVE-2025-47812-Research0githubgithub.com/0xS4N4TG/CVE-2025-478120githubgithub.com/H3XploR/Exploit_CVE-2025-478120githubgithub.com/ill-deed/WingFTP-CVE-2025-47812-illdeed0githubgithub.com/pevinkumar10/CVE-2025-478120githubgithub.com/rxerium/CVE-2025-478120githubgithub.com/CTY-Research-1/CVE-2025-47812_Lab_environment0githubgithub.com/dkstar11q/Blackash-CVE-2025-478120githubgithub.com/matesz44/CVE-2025-478120githubgithub.com/havbay/CVE-2025-47812-PoC0githubgithub.com/popyue/CVE-2025-478120vulncheckvulncheck.com/xdb/429e43d983e8no verificadovulncheckvulncheck.com/xdb/ef88dbe0a5bcno verificadovulncheckvulncheck.com/xdb/8131cb80ed91no verificadovulncheckvulncheck.com/xdb/4193f154f69bno verificadovulncheckvulncheck.com/xdb/23e4b000d2c3no verificadovulncheckvulncheck.com/xdb/a15896ce1383no verificadovulncheckvulncheck.com/xdb/61a1f71d6b7bno verificadovulncheckvulncheck.com/xdb/f89d4ff48eb4no verificadovulncheckvulncheck.com/xdb/330d9ad9e1adno verificadovulncheckvulncheck.com/xdb/f118260e521cno verificadovulncheckvulncheck.com/xdb/2c63fe5d51beno verificadovulncheckvulncheck.com/xdb/9f7e42af062dno verificadovulncheckvulncheck.com/xdb/68ce3e741d88no verificadovulncheckvulncheck.com/xdb/98e8dff772a5no verificadovulncheckvulncheck.com/xdb/30b88a8cb59dno verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.