
CVE-2026-93300에 대한 Python 개념 증명(PoC)으로, EventON Subscriber WordPress 플러그인의 인증되지 않은 SQL 인젝션 취약점입니다. AJAX 핸들러를 핑거프린팅하고 시간 기반 오라클을 통해 데이터베이스 데이터를 추출합니다.
CVE-2026-93300에 대한 Python 개념 증명(PoC): EventON - Subscriber WordPress 플러그인의 email 파라미터를 통한 인증되지 않은 SQL 인젝션 (Wordfence, CVSS 7.5 High).
| CVE | CVE-2026-93300 |
| 플러그인 | EventON - Subscriber (eventon-subscriber) |
| 영향받는 버전 | 모든 버전 ≤ 1.4.5 |
| 수정된 버전 | 없음 (2026-10 기준) |
| 벡터 | POST /wp-admin/admin-ajax.php, action=evosub_new_subscriber, 파라미터 email |
| 인증 | 없음 (인증되지 않음) |
| CWE | CWE-89 SQL 인젝션 |
구독 양식 AJAX 핸들러(evosub_new_subscriber, wp_ajax_nopriv_로 등록되어 assets/evosub_script.js의 공개 프론트엔드 양식에서 접근 가능)는 사용자가 제공한 email 값을 사용하여 기존 SQL 쿼리를 작성하면서 $wpdb->prepare() / 적절한 이스케이프를 사용하지 않습니다. 이 값은 이스케이프 없이 쿼리에 도달하므로, 공격자는 문자열 리터럴을 탈출하여 쿼리를 추가/수정함으로써 데이터베이스에서 임의의 데이터를 읽을 수 있습니다.
evosub_script.js의 클라이언트 측 이메일 정규식은 브라우저에서 유일한 형식 검사이며, 서버 측 보호 기능을 제공하지 않습니다.
# 1. Detect only (fingerprint handler, find working injection oracle)
python3 cve_2026_93300.py --url https://target.example --mode check
# 2. Dump wp_users (login / email / password hash)
python3 cve_2026_93300.py --url https://target.example --mode users --prefix wp_
# 3. Extract any scalar query result
python3 cve_2026_93300.py --url https://target.example --mode sql \
--sql "SELECT option_value FROM wp_options WHERE option_name='admin_email'"
| 옵션 | 기본값 | 설명 |
|---|---|---|
--mode | check | check / users / sql |
--action | evosub_new_subscriber | 테스트할 AJAX 액션 |
--param | email | 주입할 파라미터 |
--prefix | wp_ | WordPress 테이블 접두사 |
--sql | — | --mode sql용 스칼라 SELECT |
--delay | 2.0 | 시간 기반 오라클용 SLEEP() 초 |
--timeout | 25 | HTTP 타임아웃 |
--max-id | 15 | 스캔할 최고 사용자 ID |
--proxy / --insecure / --ua | — | HTTP 프록시 / TLS 검증 건너뛰기 / 사용자 지정 UA |
action=evosub_new_subscriber를 등록되지 않은 액션(0 / HTTP 400)과 비교하여 핸들러가 존재하고 살아 있는지 확인합니다.', ", \) → SQL 오류가 반사되면(WP_DEBUG) 오류 기반 오라클을 사용합니다(가장 빠르며 비트당 단일 요청);SLEEP()을 이용한 UNION 컬럼 수 브루트 포스 → union-time 오라클(프로브당 한 번 평가, 행별 지연 없음);;SELECT SLEEP(...)) → 드라이버가 다중 문을 허용하면 stacked-time 오라클;OR/AND/paren/concat SLEEP) → template-time 오라클 폴백.1=1 → 참, 1=0 → 거짓(반복)을 응답해야 하며, 이는 느리거나 불안정한 대상에서의 오탐을 걸러냅니다.LENGTH()와 ASCII(SUBSTRING(...))에 대한 이진 탐색(문자당 7회 요청).--mode check는 user_login@USER()의 정상성 추출로 마무리하여 데이터 접근을 입증합니다.
evo-subscriber 포스트 타입에 몇 개의 poc*@example.invalid 항목이 생성될 수 있으며, 이는 Events → All Subscribers에서 확인할 수 있고 휴지통으로 이동할 수 있습니다.email을 검증하면 모든 프로브가 동일하게 동작하며 도구는 취약하지 않음 / 입력 검증됨으로 보고합니다.admin-ajax.php가 손상된 대상(기준선에서 치명적 오류)은 비정상으로 보고되고 중단됩니다.SELECT가 아닌 쿼리 형태(INSERT/UPDATE 컨텍스트)는 탐지되지만 작동하는 시간 오라클이 없을 수 있습니다.--delay를 1.0 이상으로 유지하세요. 지연이 너무 작으면 고지연 링크에서 위음성이 발생합니다.email(및 모든 요청 입력)을 $wpdb->prepare() / esc_sql()로 처리하고, 서버 측에서 is_email()로 검증하세요.email 값에 SQL 메타문자(', ", \, --, ;, UNION)가 포함된 비인증 admin-ajax.php 요청을 차단하세요.승인된 보안 테스트 및 교육 목적으로만 사용하세요. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 모든 관련 법률을 준수할 책임은 사용자에게 있습니다.