
Уязвимость хранимого межсайтового скриптинга (XSS) в функции записей блога ERPNEXT v15.67.0 позволяет злоумышленникам выполнять произвольные веб-скрипты или HTML-код с помощью специально созданной полезной нагрузки, внедряемой в поле содержимого.
📌 Краткое описание
В модуле «Блог» ERPNext (v15.67.0) / Frappe (v15.72.4) существует уязвимость межсайтового скриптинга (XSS) с сохранением. Аутентифицированный пользователь, который может создавать или редактировать записи блога, может внедрить специально сформированный HTML/JavaScript в поле content. Вредоносная нагрузка сохраняется и выполняется в браузере любого пользователя, открывающего страницу записи блога, что позволяет выполнять произвольные сценарии, раскрывать информацию, вызывать отказ в обслуживании и осуществлять другие атаки на стороне клиента. Права администратора не являются строго обязательными — эксплуатировать уязвимость может любой пользователь с правом создания/редактирования записей блога.
Тип уязвимости: Межсайтовый скриптинг с сохранением (CWE‑79)
Затронутые продукты: ERPNext / Frappe
Затронутые версии (сообщённые):
Затронутый компонент: модуль «Блог» ERPNext
Маршрут: /app/blog-post/<blog_name>
Уязвимое поле: content (форма создания/редактирования записи блога)
Тип атаки: удалённая (требуется аутентификация и права на создание записей блога)
Серьёзность: высокая (выполнение кода на стороне клиента, кража данных, возможный перехват сессии)
Оценочный балл CVSS v3.1: 7.5 (High) — оценка; окончательный балл должен выставить уполномоченный орган (CNA)
Статус: не исправлено (по сообщению)
Обнаружил: Mohammed Aloli
Дата обнаружения: не указана
Идентификатор CVE: CVE-2025-56379
Тестируйте только в авторизованных / лабораторных средах. НЕ запускайте атаку против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения.
Шаги воспроизведения
Выполните аутентификацию в целевом экземпляре ERPNext под пользователем с правом создания/редактирования записей блога.
Перейдите к маршруту создания/редактирования записи блога, например:
/app/blog-post/<blog_name>
В поле content вставьте нагрузку и сохраните запись:
Откройте страницу записи блога (/app/blog-post/<blog_name>) под другим пользователем (или под тем же пользователем в новом браузере). Нагрузка выполняется в браузере просматривающего (в данном случае — alert("xss")).
Примечания: в PoC используется простой alert через onerror. Реальные атаки могут красть cookie-файлы, выполнять действия от имени жертвы или загружать удалённые сценарии (с учётом CSP и флагов cookie).
Злоумышленник, который может создавать или редактировать записи блога, сохраняет вредоносный сценарий в поле content. Любой пользователь — включая администраторов — который открывает страницу записи блога, выполнит сценарий злоумышленника в контексте своего браузера. Последствия включают кражу сессии (если cookie не защищены флагом HttpOnly), принудительные действия в сессии жертвы, кражу данных со страниц, доступных злоумышленнику, атаки типа UI redress, а также возможный отказ в обслуживании клиентских компонентов.
content на входе и/или выполняйте экранирование на выходе с помощью надёжного HTML-санитайзера, удаляющего опасные теги и атрибуты (удалите атрибуты on*, URI javascript:, <script>, `` и т. д.). Предпочтительно использовать хорошо поддерживаемые библиотеки.<p>, <b>, <i>, <ul>, <li>, <a href> со строгой проверкой href). Запрещайте встроенные обработчики событий.'unsafe-inline', при необходимости используйте разрешения сценариев на основе nonce/хешей).https://github.com/frappe/erpnexthttps://github.com/frappe/frappehttps://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.htmlавтор: Mohammed Aloli
Данный материал предназначен только для защитных целей, целей устранения уязвимости и повышения осведомлённости. Не пытайтесь эксплуатировать эту уязвимость против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения. Если вы администрируете ERPNext/Frappe, применяйте исправления, обеспечьте очистку ввода и следуйте приведённым выше рекомендациям по смягчению.
HttpOnly и установлены соответствующие атрибуты SameSite, чтобы снизить риски кражи cookie и атак, подобных CSRF.