← voltar
CVE-2025-47812criticalsob ataqueCWE-158

CVE-2025-47812

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 10epss 95%
da publicação à arma0 dias
Publicada no NVD10 de jul.
1ª PoC1 de jul.
metasploit19 de jun.
CISA KEV+4d
probabilidade de exploração
95%top 1% das CVEs
exploração observada
simCISA + VulnCheck
35 exploit(s) público(s)
Ação exigida pela CISAprazo 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.

Resumo

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.

Detalhamento 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.

Como é explorada

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.

Versões

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

Como se proteger

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.

Como 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.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
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/52347não verificadogithubgithub.com/4m3rr0r/CVE-2025-47812-poc54githubgithub.com/0xcan1337/CVE-2025-47812-poC13githubgithub.com/0xgh057r3c0n/CVE-2025-478123githubgithub.com/shadowgit30/CVE-2025-478122githubgithub.com/estebanzarate/CVE-2025-47812-Wing-FTP-Server-7.4.3-Unauthenticated-RCE-PoC2githubgithub.com/r0otk3r/CVE-2025-478122githubgithub.com/0xjuarez/CVE-2025-478121githubgithub.com/blindma1den/CVE-2025-478121githubgithub.com/rxerium/CVE-2025-478120githubgithub.com/dkstar11q/Blackash-CVE-2025-478120githubgithub.com/matesz44/CVE-2025-478120githubgithub.com/havbay/CVE-2025-47812-PoC0githubgithub.com/popyue/CVE-2025-478120githubgithub.com/Majdae/CVE-2025-47812-Research0githubgithub.com/H3XploR/Exploit_CVE-2025-478120githubgithub.com/0xS4N4TG/CVE-2025-478120githubgithub.com/ill-deed/WingFTP-CVE-2025-47812-illdeed0githubgithub.com/pevinkumar10/CVE-2025-478120githubgithub.com/CTY-Research-1/CVE-2025-47812_Lab_environment0vulncheckvulncheck.com/xdb/f118260e521cnão verificadovulncheckvulncheck.com/xdb/2c63fe5d51benão verificadovulncheckvulncheck.com/xdb/9f7e42af062dnão verificadovulncheckvulncheck.com/xdb/68ce3e741d88não verificadovulncheckvulncheck.com/xdb/98e8dff772a5não verificadovulncheckvulncheck.com/xdb/30b88a8cb59dnão verificadovulncheckvulncheck.com/xdb/a15896ce1383não verificadovulncheckvulncheck.com/xdb/23e4b000d2c3não verificadovulncheckvulncheck.com/xdb/4193f154f69bnão verificadovulncheckvulncheck.com/xdb/429e43d983e8não verificadovulncheckvulncheck.com/xdb/ef88dbe0a5bcnão verificadovulncheckvulncheck.com/xdb/8131cb80ed91não verificadovulncheckvulncheck.com/xdb/61a1f71d6b7bnão verificadovulncheckvulncheck.com/xdb/f89d4ff48eb4não verificadovulncheckvulncheck.com/xdb/330d9ad9e1adnão verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.