Телефонная платформа FreePBX, на которой строят офисные АТС и голосовые сервисы, получила исправления сразу для нескольких уязвимостей в модулях. Часть ошибок открывает путь к выполнению команд на сервере, часть позволяет читать чужие файлы, а одна работает вообще без входа в веб-интерфейс. Разработчики закрыли проблемы в обновлённых версиях модулей, и до установки патчей часть настроек остаётся уязвимой. Рискуют организации, которые держат FreePBX с подключением к внешним телефонным сетям.
Детали уязвимостей
Самая заметная брешь прячется в модуле журнала событий каналов. Это хранимый межсайтовый скриптинг, но приходит он со стороны телефонии. Внешний абонент, способный подставить любое имя или номер в определитель номера (Caller ID), помещает в это поле вредоносную строку. Модуль записывает поля вызова в журнал, а страница отчёта выводит их без экранирования. В момент, когда администратор открывает отчёт, код срабатывает в его уже авторизованной сессии браузера.
Существенно, что злоумышленник в веб-интерфейс не заходит. Вход в панель ему не нужен, потому что вредоносные данные попадают в систему через телефонный канал. Оказавшись в сессии администратора, код может отправлять запросы от его имени, читать доступные в интерфейсе данные и продвигаться дальше по инфраструктуре. Оценка этой уязвимости - 8.7 по шкале CVSS, высокий уровень. Ошибка живёт в модуле с 2015 года.
Вторая группа проблем сосредоточена в модуле резервного копирования. Восстановление из архива выполняет служебные действия и подставляет в них имя резервной копии, заданное пользователем. Проверка этого имени недостаточна, поэтому аутентифицированный администратор с доступом к функции восстановления может внедрить служебные символы командной оболочки и выполнить произвольные команды на сервере. Исполняются они от имени пользователя, под которым работает веб-сервер, обычно это учётная запись телефонии.
Похожая ошибка в том же модуле связана с обработкой самого архива. При восстановлении FreePBX извлекает из пользовательского архива выбранные файлы и передаёт их содержимое на десериализацию, то есть на восстановление объектов из сохранённого вида, без проверки целостности и без ограничений на типы объектов. Вредоносный файл внутри архива приводит к выполнению кода в момент восстановления. Атакующему не нужен доступ к командной строке или право записи в файловую систему за пределами обычного сценария восстановления. Эта уязвимость тоже получила оценку 8.7 и высокий уровень.
Ещё один путь к выполнению команд даёт модуль системных записей. Он позволяет сохранить служебные символы в параметре воспроизведения. Система запоминает это значение, дальше оно попадает в генерируемый план набора Asterisk и позже доходит до системного вызова. После применения конфигурации и запуска служебного кода команды исполняются от имени пользователя телефонии. Оценка - 8.6 по шкале CVSS. Ошибка появилась примерно в 2015 году и относится к отложенным: между сохранением данных и их срабатыванием проходит время.
Отдельная проблема касается модуля отчёта о записях разговоров. Он разрешает скачивать произвольные файлы, доступные на чтение пользователю телефонии. На системах с единственным администратором риска нет. Но там, где права распределены между несколькими учётными записями, администратор с урезанными правами выходит за пределы каталога с записями. Так он получает файл с учётными данными базы данных FreePBX, служебные секреты Asterisk и записи чужих разговоров. Уязвимость среднего уровня, 6.9 по шкале CVSS.
Эта брешь обходит разграничение прав. Даже администратор, которому раздел с отчётами никогда не выдавали, может воспользоваться ошибкой и прочитать то, что предназначено только полноправным операторам. Для организаций с распределёнными ролями это означает утечку служебных данных и подслушанных разговоров, а закрытая информация о внутренней инфраструктуре облегчает подготовку следующих атак.
Разработчики выпустили исправления отдельными версиями модулей. Ветка FreePBX 16 закрывает резервное копирование в версии 16.0.75, журнал событий каналов и системные записи в 16.0.21, отчёт о записях в 16.0.33.8. Ветка FreePBX 17 поднимает резервное копирование до 17.0.13, журнал событий каналов до 17.0.3, системные записи до 17.0.6, отчёт о записях до 17.0.3.16. Кроме того, обновления вышли для модулей music, ucp, soundlang, superfecta и api.
Обновлять модули нужно до любых дальнейших операций с резервными копиями. Восстановление из архива само по себе опасно, поэтому старый модуль может сработать раньше, чем администратор успеет проверить содержимое архива. Вендор дополнительно советует ограничить доступ к панели администратора средствами управления пользователями, VPN, многофакторной аутентификации (MFA) и модуля межсетевого экрана. Отчёты о вызовах до обновления открывать не нужно, а приём звонков от провайдеров, которые не проверяют определитель номера, лучше запретить на уровне настроек.
Сообщений об эксплуатации этих уязвимостей в реальных атаках пока нет, и большинству проблем CVE-идентификаторы не присвоили. Но сочетание хранимого межсайтового скриптинга без аутентификации и нескольких путей выполнения команд делает обновление модулей обязательным. Телефонная станция с выходом во внешние сети остаётся заметной целью, и закрывать такие бреши лучше до появления готовых эксплойтов.
Ссылки
- https://github.com/FreePBX/security-reporting/security/advisories/GHSA-9cjf-xw9x-55hh
- https://github.com/FreePBX/security-reporting/security/advisories/GHSA-fwpm-x5rh-2pr6
- https://github.com/FreePBX/security-reporting/security/advisories/GHSA-x6qq-4527-j9gf
- https://github.com/FreePBX/security-reporting/security/advisories/GHSA-hq6g-xv43-3v87
- https://github.com/FreePBX/security-reporting/security/advisories/GHSA-5457-hm39-pcfc