
CVE-2025-67875 - ChurchCRM имеет хранимую XSS через назначение свойств Person, ведущую к захвату сеанса администратора
| Поле | Подробности |
|---|
| Идентификатор CVE | CVE-2025-67875 |
| Серьезность | HIGH |
| Рекомендация | Посмотреть рекомендацию |
| Обнаружено | Lukasz Rybak |
Критическая уязвимость повышения привилегий существует в ChurchCRM версии 6.3.0 и ранее. Аутентифицированный пользователь с определенными разрешениями среднего уровня («Edit Records» и «Manage Properties and Classifications») может внедрить постоянную полезную нагрузку межсайтового скриптинга (XSS) в профиль администратора. Полезная нагрузка выполняется, когда администратор просматривает свою страницу профиля, что позволяет атакующему перехватить сессию администратора, выполнять административные действия и добиться полного захвата учетной записи.
Эта уязвимость представляет собой комбинацию двух отдельных недостатков: небезопасной прямой ссылки на объект (IDOR), которая позволяет любому пользователю просматривать профиль любого другого пользователя, и уязвимости нарушенного контроля доступа, которая позволяет пользователю с общими разрешениями на редактирование изменять свойства записи любого другого пользователя.
Цепочка атаки выглядит следующим образом:
IDOR в PersonView.php: В начале PersonView.php отсутствует проверка авторизации. Любой аутентифицированный пользователь может просмотреть страницу профиля любого другого пользователя (например, PersonView.php?PersonID=1 для администратора), просто зная его ID.
Нарушенный контроль доступа в PropertyAssign.php: Функциональность «Назначить новое свойство», доступная со страницы PersonView.php другого пользователя, перенаправляет пользователя на PropertyAssign.php. Этот скрипт правильно проверяет, есть ли у пользователя общее разрешение isEditRecordsEnabled(), но не выполняет проверку авторизации на уровне объекта, чтобы убедиться, что пользователю разрешено редактировать конкретный PersonID, переданный в URL. Это позволяет пользователю с разрешением «Edit Records» изменять свойства любого человека в системе, включая администратора.
Вектор хранимой XSS: Злоумышленник может использовать эти два недостатка, чтобы перейти на страницу профиля администратора и с помощью формы «Назначить новое свойство» сохранить вредоносную XSS-полезную нагрузку в записи администратора. Поле Value для текстовых свойств не проходит должную санацию на входе (применяется только strip_tags, который не удаляет обработчики событий) и не кодируется на выходе, что приводит к хранимой XSS.
src/PropertyAssign.php): Сохраняет значение свойства после применения только strip_tags(), что допускает атрибуты обработчиков событий, такие как onerror.src/PersonView.php): Отображает сохраненное значение свойства непосредственно в HTML без htmlspecialchars(), что приводит к выполнению полезной нагрузки.
// 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).
PropertyAssign.php).

PersonView.php?PersonID=1), полезная нагрузка выполнится немедленно, и появится окно предупреждения. Злоумышленник может использовать более продвинутую полезную нагрузку для кражи сессионного cookie администратора.

Это критическая уязвимость повышения привилегий. Она позволяет пользователю с определенными повышенными (но не административными) разрешениями получить полный контроль над учетной записью администратора. Перехватив сессию администратора, злоумышленник может выполнять любые действия, доступные администратору, включая создание новых учетных записей администратора, удаление данных и, возможно, комбинирование этой уязвимости с другими для полной компрометации сервера.
Сообщил: Łukasz Rybak
Данный CVE был ответственно раскрыт в соответствии с практиками координированного раскрытия уязвимостей. Предоставленная здесь информация предназначена только для образовательных и защитных целей.