
CVE-2026-27621 - TypiCMS Core has Stored Cross-Site Scripting (XSS) via SVG File Upload
| Campo | Detalhes |
|---|---|
| ID do CVE | CVE-2026-27621 |
| Severidade | MÉDIA |
| Aviso | Ver Aviso |
| Descoberto por | Lukasz Rybak |
Existe uma vulnerabilidade de Cross-Site Scripting (XSS) Armazenado no módulo de upload de arquivos do TypiCMS. A aplicação permite que usuários com permissões de upload de arquivos enviem arquivos SVG. Embora haja uma validação de tipo MIME, o conteúdo do arquivo SVG não é sanitizado. Um atacante pode enviar um arquivo SVG especialmente criado contendo código JavaScript malicioso. Quando outro usuário (como um administrador) visualiza ou acessa esse arquivo através da aplicação, o script é executado no navegador dele, levando a um comprometimento da sessão desse usuário.
O problema é agravado por um bug na lógica de parsing SVG, que pode causar um erro 500 se o SVG enviado não contiver um atributo viewBox. No entanto, isso não mitiga a vulnerabilidade XSS, pois um atacante pode facilmente incluir um atributo viewBox válido em seu payload malicioso.
TypiCMS\Modules\Core\Http\Requests\FileFormRequest.php e TypiCMS\Modules\Core\Services\FileUploader.php.A vulnerabilidade decorre de dois pontos principais:
FileFormRequest explicitamente lista svg como um tipo MIME permitido para uploads.FileUploader salva o arquivo SVG no servidor sem analisar e sanitizar seu conteúdo para remover elementos potencialmente maliciosos, como tags <script> ou manipuladores de eventos on*.Quando o disco do sistema de arquivos padrão está definido como public, o arquivo SVG enviado é armazenado em um diretório de acesso público, tornando trivial acessar o arquivo via URL direta e acionar o payload XSS.
Criar um Arquivo SVG Malicioso:
Crie um arquivo chamado malicious.svg com o seguinte conteúdo. O atributo viewBox está incluído para contornar o bug de parsing da aplicação.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
<script>
// Uma PoC simples para demonstrar a vulnerabilidade
alert('XSS no TypiCMS! Seu cookie de sessão é: ' + document.cookie);
</script>
<text x="10" y="50">Se você está vendo isso, o script foi executado.</text>
</svg>
Enviar o Arquivo Malicioso:
/admin/files).malicious.svg. A aplicação aceitará o arquivo e o armazenará.
http://<seu-site>/storage/files/malicious.svg.A exploração bem-sucedida desta vulnerabilidade permite que um atacante execute JavaScript arbitrário no contexto do navegador da vítima. Embora o uso da flag HttpOnly nos cookies de sessão impeça o roubo direto do ID da sessão via document.cookie, o atacante ainda pode alcançar um comprometimento total da conta da vítima ao realizar ações em nome dela.
O impacto inclui:
Tomada de Conta via Falsificação de Ação: O script do atacante pode fazer requisições autenticadas para a API da aplicação a partir do navegador da vítima. Isso permite que o atacante execute qualquer ação que a vítima está autorizada a fazer, como:
Divulgação de Informações Sensíveis: O script pode ler o conteúdo de qualquer página que a vítima visualizar no painel de administração. Isso inclui listas de usuários (com nomes e e-mails), configurações privadas da aplicação e outros dados sensíveis, que podem então ser exfiltrados para um servidor controlado pelo atacante.
Phishing e Engenharia Social: O script pode manipular a interface do painel de administração para exibir formulários de login falsos, enganando o usuário para que reinsira suas credenciais, ou redirecioná-lo para um site malicioso.
Registro de Teclas: O script pode capturar qualquer informação que a vítima digitar em formulários na página comprometida.
Como o atacante pode realizar qualquer ação como um administrador autenticado, esta vulnerabilidade efetivamente leva a um comprometimento total da aplicação, mesmo sem acesso direto ao cookie de sessão. O risco é Alto.
Recomenda-se aplicar uma abordagem de defesa em profundidade para mitigar esta vulnerabilidade.
Correção Principal: Sanitizar Conteúdo SVG:
A solução mais robusta é sanitizar arquivos SVG no momento do upload. Antes de salvar o arquivo, ele deve ser analisado para remover todos os elementos potencialmente perigosos, incluindo tags <script>, <style>, <foreignObject> e todos os atributos de evento on*. Isso pode ser alcançado usando uma biblioteca de sanitização SVG dedicada.
Correção Secundária: Desabilitar Uploads de SVG:
Se uploads de SVG não forem um recurso crítico para a aplicação, a solução mais simples e segura é desabilitá-los completamente. Isso pode ser feito removendo 'svg' da lista de tipos MIME permitidos em TypiCMS\Modules\Core\Http\Requests\FileFormRequest.php.
// Em FileFormRequest.php
// ANTES:
$fileRule = 'mimes:jpeg,gif,png,...,svg,...|max:...';
// DEPOIS:
$fileRule = 'mimes:jpeg,gif,png,...,pdf,...|max:...'; // 'svg' removido
Endurecimento - Política de Segurança de Conteúdo (CSP): Implemente um cabeçalho rigoroso de Política de Segurança de Conteúdo (CSP) para a aplicação. Uma CSP bem configurada pode prevenir a execução de scripts inline, o que mitigaria o impacto desta vulnerabilidade XSS.
Endurecimento - Servir Conteúdo do Usuário de um Domínio Separado: Sirva todos os arquivos enviados pelo usuário a partir de um domínio separado e sem cookies. Esta é uma medida de segurança altamente eficaz que isola o conteúdo gerado pelo usuário da aplicação principal, impedindo que scripts acessem cookies de sessão ou interajam com o DOM da aplicação.
Este CVE foi divulgado de forma responsável seguindo práticas coordenadas de divulgação de vulnerabilidades. As informações fornecidas aqui são apenas para fins educacionais e defensivos.