
CVE-2026-82222에 대한 개념 증명 익스플로잇으로, GiveWP WordPress 플러그인 버전 4.16.7.1까지에서 인증 없이 원격 코드 실행으로 이어지는 PHP 객체 주입 취약점입니다.
| 범위 | 도달 가능 여부 |
|---|
<= 4.16.5.1 | 기본 설치. 게시된 양식 1개, 활성 게이트웨이 1개. |
4.16.6 ~ 4.16.7.1 | 가능, 레거시(비 V3) 양식이 존재하는 경우. 신규 V3 전용 설치는 불가. |
Python 3.8+ 및 requests 필요.
pip install requests
python cve-2026-82222.py http://127.0.0.1:8080
python cve-2026-82222.py http://127.0.0.1:8080 --check
python cve-2026-82222.py http://127.0.0.1:8080 42 -c id
python cve-2026-82222.py http://127.0.0.1:8080 -g offline
-c의 기본값은 id입니다. 명령에 < > & %는 사용할 수 없으며, 공백은 ${IFS}로 변환됩니다.
탐지에 실패하면 양식 ID를 전달하세요. 활성화된 게이트웨이를 스크립트가 찾지 못하면 -g를 전달하세요.
기부 요청은 종종 HTTP 500을 반환하거나 타임아웃됩니다. 이는 정상입니다. 세션 쓰기가 먼저 발생합니다. system() 출력은 디스크의 파일이 아닌 다음 요청(/?give_action=view_receipt 등)에 포함됩니다.
나머지 옵션은 python cve-2026-82222.py -h를 참조하세요.
POST give_action=user_register. GiveWP가 계정을 생성하고 인증 쿠키를 설정합니다. users_can_register는 확인하지 않습니다./wp-admin/profile.php를 통해 last_name에 저장됩니다.give_last를 생략합니다. process-donation.php가 usermeta에서 이름을 읽고, maybeSafeUnserialize(allowed_classes => false)를 실행한 후 __PHP_Incomplete_Class를 wp_give_sessions에 기록합니다. PHP는 입력 과정에서 원래 객체 바이트를 다시 출력합니다.TCPDF::__destruct()가 call_user_func_array('system', [cmd])에 도달합니다. Stdout은 해당 응답에 포함됩니다.TCPDF.__destruct()
-> Symfony Session.getIterator()
-> Give\TestData ProviderForwarder.__call()
-> call_user_func_array('system', [cmd])
pre_user_last_name이 NUL을 제거하므로 가젯 속성은 손상되지 않습니다. 백슬래시는 stripslashes_deep와 removeBackslashes를 통과하기 위해 4배로 이스케이프됩니다.
MIT. LICENSE 참조.