
PHP getimagesize() CVE-2025-14177 - 힙 메모리 누수 익스플로잇 생성기 완전한 기능의 Python 익스플로잇 체인
getimagesize() 힙 메모리 누수공인된 침투 테스트 및 보안 연구 전용입니다.
| 필드 | 값 |
|---|---|
| CVE | CVE-2025-14177 |
| CWE | CWE-524 (초기화되지 않은 리소스 사용) |
| 심각도 | 보통 — CVSS 6.3 |
| 근본 원인 | php_read_stream_all_chunks()가 연속적인 청크를 buffer[0]에 기록하여 이전 데이터를 초기화되지 않은 힙 메모리로 덮어씀 |
getimagesize("php://filter/.../resource=malicious.jpg", $info)
└─ php_read_stream_all_chunks()
├─ Chunk 1 (8KB) → memcpy(buffer+0, chunk1, 8192)
├─ Chunk 2 (8KB) → memcpy(buffer+0, chunk2, 8192) ← 덮어쓰기!
└─ $info['APP1'] = chunk2 + 초기화되지 않은 힙 가비지
악의적인 JPEG는 다중 청크 읽기 경로를 강제하기 위해 과도하게 큰 APP1 마커(16KB)를 포함합니다. 반환된 APP1 필드는 자격 증명, 토큰, 세션 데이터 또는 ASLR 포인터를 포함할 수 있는 힙 메모리를 유출합니다.
[1] RECON getimagesize() 출력(APP1 필드)을 노출하는 PHP 앱 찾기
[2] PREP 악성.jpg 제작 (APP1 = 16KB)
[3] EXPLOIT 업로드 → getimagesize($file, $info) 트리거
[4] EXTRACT $info['APP1']에서 유출된 힙 데이터 파싱
[5] IMPACT 자격 증명 도용 / 토큰 추출 / ASLR 우회
python3 CVE-2025-14177.py [mode]
./exploit_output/)exploit_output/
├── malicious.jpg # crafted JPEG payload (APP1 = 16KB)
├── exploit_standalone.php # deployable PHP exploit
├── exploit_report.json # full analysis report
└── test_cases.json # 3 test scenarios
| 케이스 | 벡터 |
|---|---|
| 1 | 직접 업로드 → getimagesize($_FILES[...], $info) |
| 2 | 스트림 필터 + LFI (php://filter/read=.../resource=...) |
| 3 | 원격 이미지 URL (/preview.php?url=attacker.com/malicious.jpg) |
$info 배열의 비정상적인 메모리 패턴php://filter 래퍼와 함께 반복적인 getimagesize() 호출PHP를 패치된 버전으로 업그레이드하십시오. 해결 방법 없음 — 패치가 필요합니다.
php -v # 버전 확인
업그레이드가 차단된 경우: 클라이언트에 반환하기 전에 $info에서 APP1을 제거하거나, allow_url_fopen에서 php://filter를 비활성화하십시오.
이 도구는 공인된 보안 테스트 전용입니다. 소유하지 않거나 명시적인 서면 허가를 받지 않은 시스템에 대한 무단 사용은 불법입니다.
| 모드 | 작업 |
|---|
demo | 전체 익스플로잇 데모 (기본값) |
gen | 악성 JPEG + PHP 익스플로잇 코드 생성 |
test | 테스트 케이스 JSON 생성 |
analyze | JPEG 생성 + 시뮬레이션 + 누수 분석 |
flow | 공격 흐름 다이어그램 출력 |