🇰🇷 한글 설명
WordPress용 Bookly 플러그인 27.7 이하 버전에서 발생하는 IDOR(부적절한 직접 객체 참조) 취약점입니다. Mobile Staff Cabinet API의 appointment() 메서드가 요청된 예약 ID의 소유권을 검증하지 않아, 인증된 스태프 사용자가 다른 스태프의 예약 상세 정보 및 고객 개인정보를 열람할 수 있습니다.
💡 쉬운 설명
직원용 앱을 사용하는 직원이 숫자 번호만 바꿔 입력하면 다른 직원이 관리하는 고객의 이름, 전화번호, 예약 메모 등을 몰래 훔쳐볼 수 있는 보안 결함입니다.
🇺🇸 원문 (English)
The Bookly plugin for WordPress is vulnerable to Insecure Direct Object Reference in versions up to, and including, 27.7 via the appointment() method of the Mobile Staff Cabinet API (resource=appointment, action=bookly_mobile_staff_cabinet) in frontend/modules/mobile_staff_cabinet/api/handlers/Handler1_0.php. This is due to the handler loading an Appointment by the attacker-supplied params[id] without verifying that the appointment's staff_id matches the authenticated staff member, whereas sibling operations (deleteAppointment, saveAppointment, appointments list) correctly scope to $this->staff->getId() when $this->role === ROLE_STAFF. This makes it possible for authenticated attackers, with staff-level mobile cabinet access (any valid access_key token bound to a Staff entity), to read appointment details — including the internal note and the full customer_appointments collection (customer full_name, email, phone, notes, custom_fields, extras, payment_total, payment_type, payment_status) — belonging to other staff members by enumerating sequential appointment IDs.
📍 영향받는 시스템
WordPress Bookly plugin versions up to and including 27.7
⚔️ 공격 벡터
인증된 스태프 권한을 가진 공격자가 API 요청의 appointment ID 파라미터를 순차적으로 변경하여 타인의 데이터를 조회
🛡️ 대응 방법
Bookly 플러그인을 최신 보안 패치가 적용된 버전으로 업데이트하거나, 해당 API 호출 시 소유권 검증 로직을 적용해야 함
🔧 검증 코드
출력된 결과에서 Bookly 플러그인의 버전이 27.7 이하인지 확인하십시오.
wp plugin list --status=active | grep -i 'bookly'