
CVE-2026-1357에 대한 개념 증명 익스플로잇으로, WordPress용 WPvivid Backup & Migration 플러그인의 인증되지 않은 임의 파일 업로드 취약점으로, 원격 코드 실행을 가능하게 합니다.
WordPress용 WPvivid Backup & Migration 플러그인(마이그레이션, 백업, 스테이징)은 버전 0.9.123 이하에서 인증되지 않은 임의 파일 업로드(Unauthenticated Arbitrary File Upload) 취약점에 노출되어 있습니다. 이는 RSA 복호화 과정의 부적절한 오류 처리와 업로드된 파일 작성 시 경로 검증(path sanitization) 부재가 결합되어 발생합니다. 플러그인이 openssl_private_decrypt()를 사용하여 세션 키 복호화에 실패하면 실행을 종료하지 않고 boolean false 값을 phpseclib 라이브러리의 AES 암호화 초기화에 전달합니다. 라이브러리는 이 false 값을 null 바이트 문자열로 처리하므로, 공격자는 예측 가능한 null 바이트 키를 사용하여 악성 페이로드를 암호화할 수 있습니다. 또한 플러그인은 복호화된 페이로드의 파일 이름을 검증 없이 수용하므로, 디렉터리 트래버설(directory traversal)을 통해 보호된 백업 디렉터리를 벗어날 수 있습니다. 이로 인해 인증되지 않은 공격자가 공개적으로 접근 가능한 디렉터리에 임의의 PHP 파일을 업로드하고 wpvivid_action=send_to_site 파라미터를 통해 원격 코드 실행(Remote Code Execution)을 달성할 수 있습니다.
https://nvd.nist.gov/vuln/detail/CVE-2026-1357
프로젝트 폴더를 다음과 같이 구성하세요:
.
├── docker-compose.yml
├── exploit.py
├── requirements.txt
├── vulnerable-plugin-folder/ # 플러그인 스테이징 영역
└── wp-content/ # 영구 WP 데이터 (Docker가 생성)
이 취약점은 이후 버전에서 패치되었으므로, 버전 0.9.123을 수동으로 다운로드하여 스테이징해야 합니다. 프로젝트 루트에서 다음 명령을 실행하세요:
# 취약한 버전 다운로드
wget https://downloads.wordpress.org/plugin/wpvivid-backuprestore.0.9.123.zip
# 스테이징 디렉터리 생성
mkdir vulnerable-plugin-folder
# 압축 해제 및 파일 이동
unzip wpvivid-backuprestore.0.9.123.zip
mv wpvivid-backuprestore/* vulnerable-plugin-folder/
rm -rf wpvivid-backuprestore wpvivid-backuprestore.0.9.123.zip
docker-compose up -d
http://localhost:8080로 이동하여 설치를 완료하세요./wp-admin)에 로그인하세요.pip install -r requirements.txt
실습 대상에 대해 스크립트를 실행하세요:
python3 exploit.py localhost:8080 --command "id"
성공하면 스크립트는 명령 실행 결과(예: uid=33(www-data) gid=33(www-data))를 출력합니다. 실습 환경에서 셸의 존재 여부를 확인할 수도 있습니다:
docker exec wpvivid-lab ls /var/www/html/wp-content/uploads/
이 도구는 교육 목적 및 승인된 보안 연구용으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다.