Обновление безопасности в DIAFAN.CMS 7.3
DIAFAN.CMS славится нагрузоустойчивостью и безопасностью, про инциденты со взломом сайта на нашей системе давненько не слышали, но недавно получили мы письмо от fstec.ru такого характера:
Обнаружена уязвимость в CMS-системе DIAFAN, позволяющая нарушителю, действующему удалённо, красть сессионные куки через XSS-атаку.
Описание уязвимости
Для воспроизведения уязвимости достаточно перейти на demo.diafan.ru. Создать временный веб-сайт. Далее «Просмотр сайта» -> «О компании» -> «Обратная связь» -> заполнить форму, указав в поле «Ваше сообщение» полезную нагрузку <img/src=x onerror=alert(document.cookie);> Затем открыть панель администратора, раскрыть наше новое сообщение и сохранить от имени администратора. Далее каждый раз при открытии раздела «Обратная связь» будет срабатывать JavaScript-код и читать содержимое значения куки в контексте текущей сессии браузера жертвы. Атака может быть эскалирована до захвата учетной записи администратора.
В общем-то суть в том, что на уровне посетителя сайта вредоносный код в форму обратной связи забросить можно. Конечно, DIAFAN.CMS этот код провалидирует и превратит в безопасный перед попаданием на сайт и покажет администратору в том виде, в котором злоумышленник его занёс. И если авторизованный администратор у себя в админке этот код увидит и без изменений сохранит в системе, то код станет рабочим. Собственно, то же самое, если бы админ сам этот зловредный код написал и опубликовал :)
ФСТЭК потребовали устранить эту уязвимость.
Диалог со ФСТЭК
Мы вступили в диалог со специалистами ФСТЭК, приводя следующие доводы.
В описании уязвимости указано:
Обнаружена уязвимость в CMS-системе DIAFAN, позволяющая нарушителю, действующему удалённо, красть сессионные куки через XSS-атаку.
Действительно, это соответствует определению атаки из Википедии по XSS
XSS (англ. Cross-Site Scripting — «межсайтовый скриптинг») — подтип атаки на веб-системы, заключающийся во внедрении в выдаваемую веб-системой страницу вредоносного кода и взаимодействии этого кода со злоумышленником.
То есть, суть XSS в том, что злоумышленнику удается внедрить на страницу JavaScript-код, который не был предусмотрен разработчиками.
Далее указан механизм воспроизведения атаки:
Для воспроизведения уязвимости будет достаточно перейти на demo.diafan.ru. Создать временный веб-сайт. Далее «Просмотр сайта» -> «О компании» -> «Обратная связь» -> заполнить форму, указав в поле «Ваше сообщение» полезную нагрузку <img/src=x onerror=alert(document.cookie);>
Действительно, форма обратной связи DIAFAN.CMS (как и все остальные формы) примет сообщение вида <img/src=x onerror=alert(document.cookie);> Однако, на моменте добавления в БД, сохранения на сайте и до какого-либо взаимодействия сайта со всей вводимой информацией посетителями без прав администратора, она безусловно проверяется на все виды xss-атак, фильтруется и преобразовывается в безопасную.
Указанная строка <img/src=x onerror=alert(document.cookie);> попадает в базу сайта только после обработки валидатором в виде:
<img/src=x onerror=alert(document.cookie);>
То есть, в безопасном виде. Соответственно, основной тезис из определения XSS-атаки о внедрении в выдаваемую веб-системой страницу вредоносного кода не подтвержден.
Далее в описании указано:
Затем открыть панель администратора, раскрыть наше новое сообщение и сохранить.
Безусловно, авторизованный администратор имеет неограниченные полномочия на внедрение любого кода в любом виде в административной части сайта. Естественно, у администратора поле сообщений (и многих других полей в административной части сайта) принимает код без обработки и валидации. Администратор может приписать любой js код, счётчиков, метрик, обработчиков и т д. к любому участку сайта. Естественно, если администратор сохранит поле <img/src=x onerror=alert(document.cookie);>, оно так и сохранится. Но это сделает администратор, а не злоумышленник. Таким образом, администратор может сразу и шелл загрузить. В DIAFAN.CMS вообще есть файловый менеджер в админке, зачем через js извращаться? Есть много способов социальной инженерии, типа отправить администратору зараженную ссылку на личный email или мессенджер и заставить что-то нажать в админке, на сайте банка и т.д. Но это именно социальная инженерия, а не xss.
Соответственно, что нам “исправлять”? Вся попадаемая на сайт извне информация от неавторизованных пользователей валидируется и преобразовывается в безопасную. Потенциально опасные теги, вида <>, трансформируются в мнемоники. Совсем запретить вводить эти символы пользователям мы не можем, это вполне официальные символы больше/меньше для обывателей. Запретить администратору из админ панели указывать js-код мы тоже не можем запретить, иначе он перестанет быть администратором.
Возражения ФСТЭК
Исследователь ФСТЭК настоял, что уязвимость относится к виду "Хранимой XSS".
Рассмотрим гипотетическую ситуацию, при которой в системе присутствует несколько административных пользователей. Каждый из них обладает правами на просмотр и сохранение тикетов, поступающих через обратную связь. Возникает вероятность того, что один из администраторов выполнит сохранение тикета без редактирования и активирует зловредный код. Также следует отметить, что способ доставки данной полезной нагрузки до целевой системы не является прямым аспектом выявленной уязвимости. Уязвимость также заключается в отсутствии валидации пользовательского ввода на стороне административного блока (CWE-20). Просим повторно ознакомится с предоставленной информацией и принять меры по устранению данного недостатка.
Под эту «уязвимость» ФСТЭК был заведён идентификатор 2025-05285
DIAFAN.CMS 7.3
Мы не стали спорить и в сборке DIAFAN.CMS 7.3.0 внедрили в административной части сайта валидацию полей, которые доступны из пользовательской части. Однако, JS-код, который нужно использовать, например, при оформлении баннеров сайта или блока счетчиков, из полей, которые доступны только в административной части сайта, по прежнему принимается без валидации.
Мы рекомендуем обновить Ваш сайт до последней версии DIAFAN.CMS 7.3, либо, если у вас одна из предыдущих версий, внимательно смотреть в админке, что именно приходит с сайта и не сохранять бездумно, а лучше сразу удалять. Благонадёжные посетители сайта вряд ли будут отправлять вам какой-то хороший код )
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.