← back
CVE-2023-5631mediumunder attackCWE-79

Stored XSS vulnerability in Roundcube

65Vexday Risk Score

Prioritize patching. It under exploitation confirmed by CISA.

ssvc Actcvss 6.1epss 76%
from disclosure to weapon
Published on NVDOct 18
CISA KEV+8d
exploitation probability
76%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
Action required by CISAfederal deadline: 2023-11-16

Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.

Summary

Falha de XSS armazenado no sanitizador HTML do Roundcube (rcube_washtml.php), explorável por meio de um e-mail HTML contendo uma imagem SVG embutida como data URI. Como o sanitizador é a única barreira entre o HTML de um e-mail arbitrário e o DOM da interface webmail, um bypass nele permite executar JavaScript no contexto da sessão do usuário só pelo fato de a mensagem ser exibida — está no catálogo KEV da CISA por exploração confirmada em campanhas reais contra webmail.

Technical detail

O rcube_washtml.php processa URIs do tipo data:image/... para decidir se sanitiza o conteúdo como SVG. A checagem original comparava o tipo MIME extraído via regex (`$matches[1]`) contendo a substring 'svg' sem normalizar espaços em branco. Um atacante podia inserir espaço, tab ou nova linha dentro da string 'svg' (ex.: 'image/s vg+xml' ou 'image/s\nvg+xml'), o que fazia o stripos() por 'svg' falhar — o washtml não reconhecia o payload como SVG e, portanto, não aplicava a sanitização destinada a remover atributos de evento e scripts.

How it’s exploited

O vetor é um e-mail HTML malicioso: um elemento aponta para um SVG codificado em base64 contendo, por exemplo, um — a manipulação do tipo MIME com espaço em branco engana o filtro. Quando a vítima abre a mensagem na interface webmail (nenhuma ação além de visualizar o e-mail é necessária, daí UI:R no vetor CVSS), o navegador processa a data URI, o SVG interno é renderizado e o manipulador de evento onerror/onload dispara, executando JavaScript arbitrário no DOM autenticado do Roundcube.

Versions

Affected
Roundcube antes de 1.4.15; 1.5.x antes de 1.5.5; 1.6.x antes de 1.6.4
Fixed in
1.4.15, 1.5.5, 1.6.4

How to protect

Atualizar para 1.4.15, 1.5.5 ou 1.6.4, que normalizam a string de tipo MIME (removendo espaços) antes de checar 'svg' e antes de checar base64, eliminando o bypass. Não há flag de configuração ou parâmetro do washtml que mitigue isso sem patch, porque o bug está na lógica central de sanitização; a única mitigação paliativa real é forçar exibição de e-mails em texto simples (desabilitando renderização HTML) ou filtrar/bloquear anexos e corpos de mensagem contendo data URIs de SVG em um gateway de e-mail — ambas quebram funcionalidade e não substituem o patch.

How to detect

Procurar no corpo de mensagens armazenadas por data URIs do tipo image/svg+xml com espaço, tabulação ou nova linha inseridos dentro da palavra 'svg' (ex.: 'image/s vg+xml', 'image/s\nvg+xml'), geralmente dentro de tags ou em conteúdo base64. Como o payload fica armazenado na caixa de mensagens e só é ativado no momento da renderização pelo cliente, não há sinal de rede confiável — a análise precisa ser feita no conteúdo das mensagens (banco/armazenamento IMAP) ou em logs de aplicação do Roundcube se houver alerta de erro JS reportado pelo usuário.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
Roundcube before 1.4.15, 1.5.x before 1.5.5, and 1.6.x before 1.6.4 allows stored XSS via an HTML e-mail message with a crafted SVG document because of program/lib/Roundcube/rcube_washtml.php behavior. This could allow a remote attacker to load arbitrary JavaScript code.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N