
CVE-2025-47812 POC
Este é um Prova de Conceito (PoC) do exploit do servidor Wing FTP (CVE-2025-47812)
As versões do Wing FTP Server anteriores a 7.4.4 sofreram de uma vulnerabilidade de Execução Remota de Código (RCE) como resultado do tratamento inseguro do parâmetro de nome de utilizador. Quando nos é permitido fazer login na página /loginok.html, podemos injetar um byte nulo %00 seguido de código Lua para obter RCE.
Quando enviamos uma requisição POST para a página loginok.html, a função c_CheckUser() (aquela que valida o nome de utilizador e a senha corretos) usa strlen(). O problema é que a função em questão é vulnerável à truncagem por byte nulo. Isso significa que se enviarmos o %00 após o nome de utilizador, a c_CheckUser() validará apenas a parte da string antes do byte nulo: "anonymous%00........." --> "anonymous". Posteriormente, a aplicação cria uma variável SESSION, que é escrita em um arquivo. No entanto, este arquivo contém não apenas o nome de utilizador, mas toda a string incluindo o byte nulo e o código seguinte. Como o arquivo é um arquivo Lua, código Lua pode ser injetado resultando em RCE.
Imagine que o login anônimo é permitido. Se enviarmos uma requisição POST com esta estrutura: username=anonymous%00]]%0dlocal+h+%3d+io.popen("whoami")%0dlocal+r+%3d+h%3aread(\"*a\")%0dh%3aclose()%0dprint(r)%0d--&password=&username_val=anonymous&password_val= teremos injetado o comando whoami após os bytes nulos usando código Lua. Uma vez feito isso, precisamos copiar o UID da resposta e enviar uma requisição GET para qualquer página autenticada, por exemplo a página dir.html usando o mesmo UID. O script CVE-2025-47812.py faz o processo por nós.