
CVE-2025-67875 - ChurchCRM의 Person Property Assignment를 통한 저장형 XSS로 관리자 세션 하이재킹 유발
| 필드 | 세부 정보 |
|---|
| CVE ID | CVE-2025-67875 |
| 심각도 | 높음 |
| 권고 | 권고 보기 |
| 발견자 | Lukasz Rybak |
ChurchCRM 버전 6.3.0 및 이전 버전에 심각한 권한 상승 취약점이 존재합니다. 특정 중간 수준 권한("Edit Records" 및 "Manage Properties and Classifications")을 가진 인증된 사용자가 관리자의 프로필에 지속적인 XSS(저장형 Cross-Site Scripting) 페이로드를 주입할 수 있습니다. 페이로드는 관리자가 자신의 프로필 페이지를 볼 때 실행되어, 공격자가 관리자 세션을 가로채고 관리 작업을 수행하며 완전한 계정 탈취를 달성할 수 있습니다.
이 취약점은 두 가지 별개의 결함의 조합입니다: 모든 사용자가 다른 사용자의 프로필을 볼 수 있게 하는 IDOR(안전하지 않은 직접 객체 참조)과, 일반 편집 권한이 있는 사용자가 다른 사용자의 레코드 속성을 수정할 수 있게 하는 손상된 접근 제어 취약점입니다.
공격 체인은 다음과 같습니다:
PersonView.php의 IDOR: PersonView.php 시작 부분에 인증 검사가 없습니다. 인증된 사용자는 관리자 ID(예: PersonView.php?PersonID=1)만 알면 다른 사용자의 프로필 페이지를 볼 수 있습니다.
PropertyAssign.php의 손상된 접근 제어: 다른 사용자의 PersonView.php 페이지에서 접근할 수 있는 "Assign a New Property" 기능은 PropertyAssign.php로 사용자를 리디렉션합니다. 이 스크립트는 사용자에게 일반 isEditRecordsEnabled() 권한이 있는지 올바르게 확인하지만, URL에 전달된 특정 PersonID를 편집할 수 있는 권한이 있는지 객체 수준 인증 검사를 수행하지 않습니다. 따라서 "Edit Records" 권한이 있는 사용자가 관리자를 포함한 시스템의 모든 사람의 속성을 수정할 수 있습니다.
저장형 XSS 벡터: 공격자는 이 두 가지 결함을 이용하여 관리자의 프로필 페이지로 이동하고 "Assign a New Property" 양식을 사용하여 악성 XSS 페이로드를 관리자의 레코드에 저장할 수 있습니다. 텍스트 기반 속성의 Value 필드는 입력 시 적절히 이스케이프 처리되지 않고(strip_tags만 적용되어 이벤트 핸들러를 제거하지 않음) 출력 시 인코딩되지 않아 저장형 XSS가 발생합니다.
src/PropertyAssign.php): strip_tags()만 적용한 후 속성 값을 저장하므로 onerror와 같은 이벤트 핸들러 속성이 허용됩니다.src/PersonView.php): 저장된 속성 값을 htmlspecialchars() 없이 HTML에 직접 렌더링하여 페이로드가 실행됩니다.
// src/PersonView.php, line ~722
<td><?= $r2p_Value ?></td> // 취약: 원시 출력
이 개념 증명은 특정 중간 수준 권한을 가진 사용자가 주요 관리자의 프로필에 저장형 XSS 페이로드를 주입할 수 있는 방법을 보여줍니다.
전제 조건:
Edit RecordsManage Properties and Classifications시나리오:

PersonID=1인 관리자의 프로필 페이지로 직접 이동합니다.
http://localhost:8101/PersonView.php?PersonID=1
PersonView.php의 IDOR로 인해 접근이 허용됩니다).
PropertyAssign.php의 손상된 접근 제어로 인해 할당이 가능합니다).

PersonView.php?PersonID=1)로 이동하면 페이로드가 즉시 실행되고 경고 상자가 나타납니다. 공격자는 더 정교한 페이로드를 사용하여 관리자의 세션 쿠키를 탈취할 수도 있습니다.

이는 심각한 권한 상승 취약점입니다. 특정 권한이 상승된(관리자는 아닌) 사용자가 관리자 계정에 대한 완전한 제어권을 얻을 수 있습니다. 관리자의 세션을 가로채어 공격자는 관리자가 사용할 수 있는 모든 작업(새 관리자 계정 생성, 데이터 삭제 등)을 수행할 수 있으며, 다른 취약점과 연쇄적으로 결합하여 서버 전체를 장악할 수도 있습니다.
보고자: Łukasz Rybak
이 CVE는 조정된 취약점 공개 절차에 따라 책임 있게 공개되었습니다. 여기에 제공된 정보는 교육 및 방어 목적으로만 사용됩니다.