Modello delle minacce
Frontmail ti permette di inviare email direttamente dal browser. È comodo, ma significa che una parte della tua integrazione vive in codice che chiunque può leggere e copiare. Questa pagina elenca tutti gli attacchi che conosciamo contro questo modello, come Frontmail si difende, cosa dovresti configurare tu e – apertamente – il rischio che resta. Se trovi qualcosa che manca, scrivi a security@frontmail.dev.
Il modello di base
Sezione intitolata “Il modello di base”- La chiave pubblica è pubblica. Si trova nel codice sorgente della tua pagina. Trattala come un nome utente, non come una password. Chiunque può copiarla e chiamare l’API da uno script.
- L’header
Originnon è un’autenticazione. I browser lo impostano onestamente, ma uno script può inviare qualsiasi valore. I domini consentiti impediscono ad altri siti di usare la tua chiave nei browser dei loro visitatori – non fermano un attaccante determinato. - Ciò che ti protegge davvero è quello che l’attaccante non può cambiare:
- il modello – l’attaccante può inviare solo i tuoi modelli e compilarne solo i parametri,
- il CAPTCHA (Turnstile) – ogni invio costa una risoluzione «da essere umano»,
- i limiti – per IP, per chiave, per organizzazione, per destinatario, e i tuoi crediti.
- La chiave privata è un segreto. Deve stare solo sul tuo server. Salta la allowlist delle origini e il CAPTCHA e può leggere la cronologia dei tuoi messaggi.
Il resto della pagina deriva da questi quattro punti.
Attacchi e difese
Sezione intitolata “Attacchi e difese”1. Phishing dal tuo dominio (il più importante)
Sezione intitolata “1. Phishing dal tuo dominio (il più importante)”Attacco. Un modello prende il destinatario dai parametri – un reset della password, una
notifica, una conferma di iscrizione alla newsletter. L’attaccante copia la tua chiave pubblica e
invia quel modello a una vittima, compilando reset_url con il proprio sito. L’email parte dal
tuo dominio, supera SPF e DKIM, è identica alle tue e porta all’attaccante.
Cosa fa Frontmail. Una richiesta con chiave pubblica verso un modello con destinatario dinamico riceve un contenuto bloccato:
- il CAPTCHA è obbligatorio (
dynamic_recipient_requires_captcha), - ogni link deve puntare ai tuoi domini consentiti – vengono controllati i link negli attributi,
nel CSS, nel testo semplice (anche
evil.com/loginsenza schema, che i client di posta trasformano in link) e nell’oggetto, inclusi trucchi comehttps://you.com@evil.com, barre rovesciate, domini Unicode sosia e caratteri codificati (link_not_allowed), - indirizzo del mittente, nome del mittente e Reply-To non possono venire dai parametri
(
dynamic_field_not_allowed), - nessun parametro HTML, parametri di testo al massimo di 500 caratteri,
- ogni destinatario riceve al massimo 5 email di questo tipo al giorno dalla tua organizzazione (configurabile).
Tutto viene controllato prima che venga consumato un credito. Le risposte automatiche sono bloccate allo stesso modo.
Cosa dovresti fare. Compila Sicurezza → Domini consentiti per i link se i tuoi link portano anche altrove rispetto al dominio del tuo sito. Configura le tue chiavi Turnstile. I modelli che invia solo il tuo server (conferme d’ordine, reset della password generati dal backend) vanno inviati con la chiave privata.
Rischio residuo. L’attaccante può comunque inviare la tua email legittima a uno sconosciuto – per esempio «Conferma l’iscrizione alla newsletter» con un link al tuo sito. Non contiene nulla che controlli lui, quindi non può fare phishing, ma può dare fastidio. Il limite per destinatario e il CAPTCHA lo tengono contenuto. Un testo semplice senza link (per esempio «chiama questo numero») in un parametro di testo resta possibile entro i 500 caratteri – limita i parametri di testo dinamici a ciò che serve davvero all’email.
2. Spam nella tua casella
Sezione intitolata “2. Spam nella tua casella”Attacco. Uno script inonda di spazzatura il modello del tuo modulo di contatto.
Cosa fa Frontmail. Limite per IP (predefinito 10 richieste / 60 s, IPv6 conteggiato per rete /64), limiti per chiave e per organizzazione, rilevamento delle anomalie, controlli lato server su browser headless e lista dei bloccati, CAPTCHA facoltativo per modello.
Cosa dovresti fare. Attiva Richiedi CAPTCHA per i moduli pubblici. Usa la lista dei bloccati per i valori di spam noti.
Rischio residuo. Senza CAPTCHA, un attaccante paziente che cambia indirizzo IP supera i limiti. Con il CAPTCHA deve pagare un servizio di risoluzione per ogni email.
3. Chiamare l’API da uno script o da una finta «app»
Sezione intitolata “3. Chiamare l’API da uno script o da una finta «app»”Attacco. L’attaccante invia richieste senza browser, con un Origin falsificato o senza
alcun Origin.
Cosa fa Frontmail. Le richieste senza Origin e Referer (tipiche degli script) vengono
rifiutate a meno che tu non abbia attivato Consenti app mobile – anche quando la tua allowlist
è vuota. Solo le organizzazioni con quell’opzione usano il CAPTCHA mobile condiviso di Frontmail;
tutte le altre devono superare il proprio widget Turnstile, e il suo token deve essere stato
emesso sul dominio da cui arriva la richiesta.
Cosa dovresti fare. Tieni Consenti app mobile disattivato se non hai un’app nativa. Il codice lato server deve usare la chiave privata.
Rischio residuo. Un Origin falsificato supera comunque la allowlist; a fermarlo sono il
CAPTCHA e i limiti (vedi il punto 2).
4. Prosciugare i tuoi crediti o la tua carta
Sezione intitolata “4. Prosciugare i tuoi crediti o la tua carta”Attacco. Con la tua chiave pubblica, l’attaccante invia tutte le email consentite dai limiti per bruciare la tua quota mensile – e, se potesse, lo scoperto e le ricariche automatiche.
Cosa fa Frontmail.
- Il traffico con chiave pubblica non usa lo scoperto e non attiva la ricarica automatica, a meno che tu non lo consenta esplicitamente (Fatturazione → Spesa dal traffico con chiave pubblica).
- La coda dei messaggi in attesa ha un tetto; oltre quel limite le richieste vengono rifiutate invece che messe in coda, così la spazzatura non può mangiarsi i crediti che acquisterai dopo.
- La ricarica automatica ha un tetto mensile di ricariche e di spesa.
Cosa dovresti fare. Mantieni le impostazioni predefinite, usa il CAPTCHA, tieni d’occhio le email sulle anomalie.
Rischio residuo. La tua quota normale e i pacchetti di crediti possono comunque essere spesi dalla spazzatura che supera CAPTCHA e limiti. Questo ti costa crediti, non denaro in più.
5. Bloccare il modulo ai visitatori reali
Sezione intitolata “5. Bloccare il modulo ai visitatori reali”Attacco. Una raffica economica di richieste non valide esaurisce i limiti della tua
organizzazione, così i visitatori reali ricevono 429.
Cosa fa Frontmail. I limiti a livello di organizzazione e il rilevamento delle anomalie contano solo le richieste che hanno superato i controlli sul modello e sul CAPTCHA; prima di questi valgono solo il limite per IP e una generosa protezione anti-flood.
Rischio residuo. Una grande raffica distribuita può comunque rallentare le cose; il firewall sull’edge (WAF) ne assorbe la maggior parte.
6. Aggirare il firewall
Sezione intitolata “6. Aggirare il firewall”Attacco. Chiamare direttamente i server di Frontmail invece di passare dalla CDN, per saltare il web application firewall e falsificare l’indirizzo IP del client.
Cosa fa Frontmail. I server accettano solo le richieste passate dalla nostra CDN e si fidano solo dell’indirizzo IP del client riportato dalla CDN. Non devi configurare nulla.
7. Una chiave privata divulgata
Sezione intitolata “7. Una chiave privata divulgata”Attacco. La chiave privata finisce nel codice del browser (spesso dopo una migrazione da
EmailJS, il cui accessToken è una chiave privata) e qualcuno la copia.
Cosa fa Frontmail. Gli SDK per browser si rifiutano di funzionare con una chiave privata
(private_key_in_browser), e l’API rifiuta le richieste con chiave privata provenienti da una
pagina web, a meno che tu non abbia attivato Consenti chiavi private nei browser. Le chiavi
private vengono conservate solo come hash.
Cosa dovresti fare. Non inserire mai sk_… nel codice frontend o in variabili VITE_ /
NEXT_PUBLIC_. Se è trapelata, ruotala immediatamente.
Rischio residuo. Chi possiede la tua chiave privata può inviare senza CAPTCHA e leggere la cronologia dei tuoi messaggi (inclusi i moduli inviati). Proteggila come una password.
8. Allegati pericolosi
Sezione intitolata “8. Allegati pericolosi”Attacco. Inviare malware a te o a un destinatario dinamico come allegato.
Cosa fa Frontmail. Gli allegati dal browser sono disattivati a meno che il modello non li
consenta. Eseguibili, script, HTML/SVG, immagini disco, file Office con macro e tipi simili vengono
bloccati, anche quando nascosti dietro trucchi come invoice.pdf.exe., caratteri da destra a
sinistra o caratteri invisibili. I caricamenti con chiave pubblica hanno un limite di volume
giornaliero.
Rischio residuo. I documenti comuni (PDF, DOCX) possono comunque contenere codice malevolo; l’antivirus del tuo client di posta è l’ultima linea di difesa.
9. Iniettare HTML o script nell’email
Sezione intitolata “9. Iniettare HTML o script nell’email”Attacco. Inserire <script>, pixel di tracciamento o un modulo fasullo in un parametro.
Cosa fa Frontmail. I parametri vengono sempre sottoposti a escape HTML (anche con {{{ }}}), i
parametri html vengono sanificati con una allowlist e non possono uscire dagli attributi, gli URL
pericolosi vengono neutralizzati, gli a capo vengono rimossi dagli header (nessuna header
injection), le chiavi che inquinano il prototype vengono scartate.
10. Molestare una persona (mail bombing)
Sezione intitolata “10. Molestare una persona (mail bombing)”Attacco. Usare un modello con destinatario dinamico per inviare molte email a un solo indirizzo.
Cosa fa Frontmail. Limite giornaliero per destinatario (predefinito 5), condiviso con le risposte automatiche; lista di soppressione per gli indirizzi che hanno dato mancato recapito o segnalato spam.
11. Impadronirsi del tuo account della dashboard
Sezione intitolata “11. Impadronirsi del tuo account della dashboard”Attacco. Tentativi di indovinare la password, sessione rubata, casella email rubata.
Cosa fa Frontmail. Rate limit sugli accessi, autenticazione a due fattori applicata a ogni metodo di accesso, link di reset della password utilizzabili una sola volta che disconnettono tutti i dispositivi, cambi di email confermati dal vecchio indirizzo, notifiche per i nuovi dispositivi, ruoli con privilegi minimi e un registro attività.
Cosa dovresti fare. Attiva la 2FA e dai ai colleghi il ruolo più limitato che basta loro.
12. Rubare i moduli inviati
Sezione intitolata “12. Rubare i moduli inviati”Attacco. Leggere la cronologia dei messaggi o i file di altri.
Cosa fa Frontmail. La cronologia è leggibile solo con la chiave privata o dai membri della tua organizzazione; ogni ricerca è limitata alla tua organizzazione, inclusi i file allegati ai modelli.
13. Eventi di recapito falsificati
Sezione intitolata “13. Eventi di recapito falsificati”Attacco. Inviare falsi eventi «bounced» o «complained» per mettere i tuoi clienti nella lista di soppressione.
Cosa fa Frontmail. I webhook dei provider vengono verificati tramite firma dove il provider lo supporta, e sempre tramite un token segreto nell’URL; un evento riguarda solo l’effettivo destinatario di un messaggio.
Cosa dovresti fare. Configura la chiave di firma del tuo provider dove è disponibile.
14. Un SDK compromesso
Sezione intitolata “14. Un SDK compromesso”Attacco. Codice malevolo nello script caricato dal tuo sito.
Cosa fa Frontmail. Le release vengono compilate senza segreti, pubblicate con provenance, e le action della CI sono fissate a versioni esatte.
Cosa dovresti fare. Carica l’SDK da un URL con versione con l’attributo integrity (vedi
SDK per browser), oppure includi il pacchetto npm nel tuo bundle.
15. Frontmail usato dai criminali
Sezione intitolata “15. Frontmail usato dai criminali”Attacco. Un sito di phishing usa il proprio account Frontmail per inviare a se stesso le password rubate – succede a ogni servizio di questo tipo.
Cosa fa Frontmail. Email del titolare verificata, monitoraggio del traffico insolito, sospensione rapida degli account segnalati. Segnala gli abusi ad abuse@frontmail.dev.
Cosa resta nelle tue mani – checklist
Sezione intitolata “Cosa resta nelle tue mani – checklist”- Compila i Siti consentiti con i tuoi domini.
- Aggiungi le tue chiavi Turnstile e richiedi il CAPTCHA sui moduli pubblici.
- Usa un destinatario dinamico solo dove serve; compila i Domini consentiti per i link.
- Tieni disattivati Consenti app mobile e Consenti chiavi private nei browser, se non ti servono.
- Chiave privata solo sul server; ruotala nel dubbio.
- Tieni disattivati lo scoperto e la ricarica automatica per la chiave pubblica (impostazione predefinita).
- Attiva la 2FA per tutto il tuo team.
- Carica l’SDK da una versione fissata con
integrity.