
В Issabel PBX версии 4.0.0-6 существует уязвимость хранимого межсайтового скриптинга (Stored Cross-Site Scripting, XSS). Она позволяет аутентифицированному злоумышленнику внедрять произвольный JavaScript или HTML-код через поля ввода Group и Description, расположенные в разделе System → Users → Groups.
| Поле | Детали |
|---|---|
| CVE ID | CVE-2023-37191 |
| Продукт | Issabel PBX (issabel-pbx) |
| Затронутая версия | 4.0.0-6 |
| Тип уязвимости | Хранимый межсайтовый скриптинг (XSS) |
| Серьёзность | Средняя |
| Дата обнаружения | 7 июля 2023 г. |
| Обнаружил | Sahil Ojha |
| Домашняя страница вендора | https://www.issabel.org/ |
| Исходный код | https://github.com/IssabelFoundation/issabelPBX |
| Протестировано на | Windows |
В Issabel PBX версии 4.0.0-6 существует хранимая межсайтовая XSS-уязвимость (Stored Cross-Site Scripting). Приложение не выполняет надлежащую санитизацию или кодирование пользовательского ввода перед сохранением его в базе данных и последующим выводом в браузере. Это позволяет аутентифицированному злоумышленнику внедрять произвольный JavaScript или HTML-код через поля ввода Group и Description, расположенные в разделе System → Users → Groups.
После сохранения вредоносной нагрузки она постоянно хранится на сервере. Каждый раз, когда любой пользователь (включая администраторов) посещает затронутую страницу, внедрённый скрипт автоматически выполняется в его браузерной сессии — без каких-либо дополнительных действий со стороны злоумышленника. Именно это отличает хранимую (постоянную) XSS от отражённой XSS; воздействие шире и опаснее, поскольку нагрузка затрагивает всех посетителей страницы.
System → Users → Groups веб-интерфейса Issabel PBXGroup (поле имени) и Description (текстовое поле)Успешная эксплуатация этой уязвимости может позволить злоумышленнику:
Поскольку нагрузка хранится на сервере, каждый пользователь, посещающий скомпрометированную страницу, подвергается воздействию — что усиливает ущерб по сравнению с атакой типа отражённой XSS.
Шаг 1: Войдите в веб-интерфейс Issabel PBX, используя учётные данные администратора.
Шаг 2: Перейдите в System → Users → Groups. В поля ввода Group и/или Description введите следующую XSS-нагрузку:
"><script>alert(1)</script>
Поля должны выглядеть примерно так, как на скриншоте ниже:

Шаг 3: Нажмите Save. Теперь нагрузка постоянно хранится в базе данных приложения.
Шаг 4: Вернитесь на страницу System → Users → Groups (или попросите любого другого пользователя посетить её). Внедрённый скрипт автоматически выполняется в браузере, как показано ниже:

Чтобы устранить эту уязвимость, команде разработчиков Issabel PBX следует применить следующие исправления:
Проверка входных данных: Строго проверяйте все пользовательские данные на стороне сервера. Отклоняйте или очищайте значения, содержащие HTML-специальные символы (<, >, ", ', &), в полях, где HTML-форматирование не требуется.
Кодирование вывода: При выводе сохранённых данных обратно в браузер применяйте контекстно-зависимое кодирование вывода (например, кодирование HTML-сущностей), чтобы нейтрализовать любые внедрённые элементы разметки. Поскольку Issabel PBX написан на PHP, используйте встроенные PHP-функции htmlspecialchars() или htmlentities(), а не собственную фильтрацию.
Политика безопасности содержимого (CSP): Внедрите строгий HTTP-заголовок Content Security Policy, чтобы ограничить источники, из которых могут выполняться скрипты. Правильно настроенная CSP может предотвратить выполнение внедрённых скриптов, даже если очистка входных данных обойдена.
Регулярные аудиты безопасности: Проводите периодические ревизии кода и тесты на проникновение для выявления и устранения уязвимостей внедрения во всём приложении.
Эта информация предоставлена только в образовательных и исследовательских целях. Автор не несёт ответственности за любое неправомерное использование этой информации. Всегда получайте надлежащее письменное разрешение перед тестированием уязвимостей на любой системе, которая вам не принадлежит.