Quando a renderização do plugin falha no modo de edição, o django CMS renderiza um bloco `cms- rendering- exception` para que os editores possam ver que um marcador de localização não pode ser renderizado. O código mais antigo construiu a cabeça daquele bloco interpolando a mensagem de exceção, as cadeias de local/ fonte e a descrição curta do plug- in falhando diretamente em uma cadeia HTML, depois retornando a saída do local como marcador seguro. Se um editor pudesse armazenar HTML em dados usados por um plugin `get_short_description()` (ou em outros valores interpolados na mensagem de exceção), e aquele plugin mais tarde levantado durante a renderização do modo de edição, a carga útil foi analisada como HTML no navegador do usuário da equipe. Esta é uma condição XSS armazenada no contexto de edição do CMS. O caminho vulnerável só é alcançado quando o sinal de localização captura uma exceção de renderização de plug- in:.
````python try: placeholder_content = "".join(plugin_content) exceto Exceção como e: context["exc_info"] = sys.exc_info() placeholder_content = self.render_exception("rendering placeholder", context, placeholder, editable) ```` ` render_exception()` constrói um `mensagem' a partir de valores que podem incluir conteúdo armazenado: - `valor` - a mensagem de exceção. - `placeholder` - a representação da cadeia de lugares. - `placeholder.source` - a representação da cadeia de objetos fonte, como o conteúdo da página. - `instance.get_ short_description()` - texto de resumo fornecido pelo plugin, muitas vezes derivado dos campos do modelo de plugin.
Na implementação vulnerável, essa mensagem foi incorporada diretamente em um título HTML. O conteúdo final do marcador de lugar foi devolvido mais tarde através de `mark_safe`, assim o escavamento automático do modelo Django não protegeu o título. ` settings.DEBUG ' não mitiga a questão: ele controla apenas se o HTML de traceback do Django é anexado. O título personalizado é renderizado no modo de edição independentemente do `DEBUG`. Escapare o título de exceção personalizada antes de devolvê- lo como marcador seguro do marcador de lugar. O código fixo atual usa `format_html`, que escapa de `message' antes de inseri- lo no título:.
````python title = format_html(' {} ', mensagem) ```. O HTML de traceback do `ExceptionReporter.get_traceback_html()` deve permanecer separado do título personalizado do django CMS; o traceback do Django não protege HTML adicional montado pelo django CMS. Até que seja corrigido, reduza a exposição garantindo que apenas a equipe de confiança completa pode editar plug-ins cujos campos armazenados estão incluídos em `get_ short_description()`, e corrigir ou desativar plug-ins que podem ser feitos para levantar durante a renderização do modo de edição. Isto é apenas uma mitigação parcial porque o erro de fuga está no caminho compartilhado de renderização de exceções. - `cms/plugin_rendering.py` - `ContentRenderer.render_placeholder` - `cms/plugin_rendering.py` - `ContentRenderer.render_exception` - Código fixo: `heading = format_html(' {} ', mensagem)` - Testes de regressão: `cms.tests.test_plugin_renderers.TestExceptionCatchers.test_exception_in_plugin_render_escapes_user_in_edit_mode`, `cms.tests.test_plugin_renderers.TestLegacyRenderExceptionCatcher.test_exception_in_plugin_render_escapes_user_content_in_edit_mode`.
Registro de aconselhamento: GHSA-hvq 6 - 2 r 72 - p 2 x 7. Identificadores relacionados: CVE- 2026 - 75526. Tempo: GitHub Advisory Database publicou este registro em 2026 - 08 - 20 T 18: 42: 36.000 Z e lista a sua última modificação como 2026 - 08 - 20 T 18: 42: 36.000 Z. Gravidade: MODERAR. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:N/AC:H/PR:L/UI:R/S:C/C:L/I:L/A:N.
Software afetado e informações de versão: pacote django-cms do PyPI — ECOSISTEM: introduzido 5.0.8, corrigido 5.0.9. Classificação e evidência: identificadores de fraqueza CWE- 79. O registro contém 5 suporte de referências nestes tipos: WEB, PACKAGE.