django CMS — это простая в использовании и удобная для разработчиков система управления корпоративным контентом на базе Django. С 5.0.8 по 5.0.9 ContentRenderer.render_placeholder в cms/plugin_rendering.py может передавать сохраненные, контролируемые злоумышленником значения в ContentRenderer.render_Exception, когда рендеринг плагина завершается сбоем в режиме редактирования. Значения из get_short_description(), сообщения об исключении, заполнителя или Placeholder.source интерполируются в заголовок cms-rendering-Exception и позже возвращаются через mark_safe.
Поскольку заголовок не экранирован, сохраненный HTML выполняется в браузере редактора, а settings.DEBUG не препятствует рендерингу пользовательского заголовка. Исправление использует format_html для экранирования сообщения до того, как будет возвращен безопасный вывод заполнителя. Эта проблема исправлена в версиях 5.0.9.
Показать оригинальное описание (EN)
django CMS is an easy-to-use and developer-friendly enterprise content management system powered by Django. From 5.0.8 until 5.0.9, ContentRenderer.render_placeholder in cms/plugin_rendering.py can pass stored, attacker-controlled values to ContentRenderer.render_exception when plugin rendering fails in edit mode. Values from get_short_description(), the exception message, the placeholder, or placeholder.source are interpolated into a cms-rendering-exception heading and later returned through mark_safe. Because the heading is not escaped, stored HTML executes in an editor’s browser, and settings.DEBUG does not prevent the custom heading from rendering. The fix uses format_html to escape the message before safe placeholder output is returned. This issue is fixed in versions 5.0.9.
Характеристики атаки
Последствия
Строка CVSS v3.1