Наши предыдущем блоге исследовали XSS-уязвимость в плагине Bookly (плагин WordPress для онлайн-бронирования и планирования – Bookly). Сегодня мы рассмотрим ещё одну XSS-уязвимость, обнаруженную в ходе нашего исследования того же плагина.
Наша команда обнаружила эту уязвимость в марте 2023 года. После её обнаружения мы незамедлительно инициировали ответственные процедуры раскрытия информации, чтобы обеспечить её оперативное устранение. Уязвимости присвоен идентификатор CVE-CVE-2023-1159, и она была успешно устранена в мае 2023 года.
В этой публикации мы подробно проанализируем первопричину уязвимости, обнаруженной в плагине Bookly. Кроме того, мы рассмотрим патч, выпущенный для эффективного устранения этой проблемы.
Анализируя CVE–2023-1159 — Аутентифицированный (Admin+) хранимый межсайтовый скриптинг через службу Название:
Наше исследование выявило уязвимость в плагине Bookly, связанную с полем «Название сервиса». Эта уязвимость делает плагин уязвимым для атак с использованием хранимого межсайтового скриптинга (XSS) из-за недостаточных мер по очистке входных данных. Важно отметить, что администраторы могут редактировать или задавать название непосредственно через интерфейс плагина.
В ходе дальнейшего расследования мы обнаружили, что если в сервисе задан вредоносный заголовок, он будет отображен и выполнен в браузере клиента без его ведома и согласия при доступе к данному сервису. Это может потенциально привести к удалённому выполнению кода, что представляет собой существенную угрозу безопасности.
Для более точного понимания следующий фрагмент кода иллюстрирует, как задается и считывается значение поля «Название службы» при создании новой службы:

Рис. 1. Метод createService, который вызывается при создании новой службы.
«createService» в свою очередь вызывает метод «parameters».

На рис.2 показаны параметры метода.
В методе 'parameters' вызывается функция 'getRequest()'. Эта функция отвечает за получение введённых значений из интерфейса. Впоследствии эти значения передаются в метод 'createService', где они сохраняются. Однако важно подчеркнуть, что в ходе этого процесса не происходит никакой очистки входных данных, что делает систему уязвимой для потенциальных угроз безопасности.

На рис.3 показан метод getRequest.
Раскрытие решения: исследование патча
Изучив патч, устраняющий уязвимость, мы определили, что переменная $parameters прошла надлежащую очистку, эффективно предотвращая потенциальные нарушения безопасности в программе. Это значительное улучшение включает в себя реализацию функции 'unfiltered_html' и метода 'stripScripts', которые играют ключевую роль в очистке $parameters и противодействии потенциальным атакам.
Используя функцию 'unfiltered_html', патч гарантирует, что отправлять нефильтрованный HTML-контент смогут только авторизованные пользователи с необходимыми правами. Это предотвращает внедрение вредоносных скриптов и значительно снижает риск межсайтовых скриптовых атак (XSS). Метод 'stripScripts' дополнительно улучшает процесс очистки, удаляя или нейтрализуя любой встроенный JavaScript-код в $parameters.
В целом этот комплексный подход к очистке гарантирует, что переменная $parameters безопасна для использования во всей кодовой базе, сводя к минимуму потенциальные уязвимости безопасности и укрепляя общую безопасность программы.

Рис. 4. Изображение заплатки.
Заключение
В этой публикации блога мы рассмотрели уязвимость, обнаруженную в плагине Bookly, которая позволяла аутентифицированным злоумышленникам внедрять вредоносные скрипты, представляя угрозу для устройств пользователей. К счастью, эта уязвимость исправлена в версии 21.8. Мы рекомендуем владельцам сайтов на WordPress своевременно обновлять свои плагины до последней версии, что крайне важно для предотвращения потенциальных атак. Своевременное применение обновлений и исправлений критически важно для поддержания безопасного присутствия в сети. Кроме того, предоставляя пользователю право «unfiltered_html», будьте осторожны и назначайте его только доверенным лицам, которым оно действительно необходимо, учитывая потенциальные последствия для безопасности.
Все SEQRITE Клиенты Quick Heal защищены от любых эксплойтов, нацеленных на эту уязвимость, благодаря следующим сигнатурам:
- HTTP/CVE-2023-1159!VK.47550
- HTTP/CVE-2023-1159!VK.47551
- HTTP/CVE-2023-1159!VK.47552
Соавтор:
Анджали Раджкумар Раут



