Modelo de amenazas
Frontmail te permite enviar correo directamente desde el navegador. Es cómodo, pero significa que parte de tu integración vive en código que cualquiera puede leer y copiar. Esta página recoge todos los ataques que conocemos contra este modelo, cómo se defiende Frontmail, qué deberías configurar tú y, con total transparencia, el riesgo que queda. Si echas algo en falta, escríbenos a security@frontmail.dev.
El modelo básico
Sección titulada «El modelo básico»- La clave pública es pública. Está en el código fuente de tu página. Trátala como un nombre de usuario, no como una contraseña. Cualquiera puede copiarla y llamar a la API desde un script.
- La cabecera
Originno es autenticación. Los navegadores la envían con honestidad, pero un script puede enviar cualquier valor. Los orígenes permitidos impiden que otros sitios web usen tu clave en los navegadores de sus visitantes, pero no frenan a un atacante decidido. - Lo que de verdad te protege es lo que el atacante no puede cambiar:
- la plantilla: el atacante solo puede enviar tus plantillas y solo rellenar sus parámetros,
- la CAPTCHA (Turnstile): cada envío le cuesta una resolución como la de una persona,
- los límites: por IP, por clave, por organización, por destinatario y tus créditos.
- La clave privada es un secreto. Solo debe estar en tu servidor. Se salta la lista de orígenes permitidos y la CAPTCHA, y puede leer tu historial de mensajes.
El resto de la página se deriva de estos cuatro puntos.
Ataques y defensas
Sección titulada «Ataques y defensas»1. Phishing desde tu dominio (el más importante)
Sección titulada «1. Phishing desde tu dominio (el más importante)»Ataque. Una plantilla toma el destinatario de los parámetros: un restablecimiento de contraseña,
una notificación, una confirmación de suscripción al boletín. El atacante copia tu clave pública y
envía esa plantilla a una víctima, rellenando reset_url con su propio sitio. El correo sale de
tu dominio, supera SPF y DKIM, es idéntico a los tuyos y enlaza al atacante.
Qué hace Frontmail. Una solicitud con clave pública a una plantilla con destinatario dinámico recibe un contenido bloqueado:
- la CAPTCHA es obligatoria (
dynamic_recipient_requires_captcha), - todos los enlaces deben apuntar a tus dominios permitidos: se comprueban los enlaces en
atributos, CSS, texto plano (también dominios sueltos como
evil.com/login, que los clientes de correo convierten en enlaces) y el asunto, incluidos trucos comohttps://you.com@evil.com, barras invertidas, dominios Unicode que imitan a otros y caracteres codificados (link_not_allowed), - la dirección del remitente, el nombre del remitente y Reply-To no pueden venir de los parámetros
(
dynamic_field_not_allowed), - no se admiten parámetros HTML y los parámetros de texto tienen como máximo 500 caracteres,
- cada destinatario recibe como máximo 5 correos de este tipo al día desde tu organización (configurable).
Todo se comprueba antes de gastar un crédito. Las respuestas automáticas se bloquean del mismo modo.
Qué deberías hacer. Rellena Seguridad → Dominios de enlaces permitidos si tus enlaces van a algún sitio distinto del dominio de tu web. Configura tus propias claves de Turnstile. Las plantillas que solo envía tu servidor (confirmaciones de pedido, restablecimientos de contraseña generados en tu backend) deberían enviarse con la clave privada.
Riesgo restante. El atacante todavía puede enviar tu correo legítimo a un desconocido; por ejemplo, «Confirma tu suscripción al boletín» con un enlace a tu sitio. No contiene nada que él controle, así que no sirve para phishing, pero puede resultar molesto. El límite por destinatario y la CAPTCHA lo mantienen en niveles bajos. Sigue siendo posible meter texto sin enlaces (por ejemplo, «llama a este número») en un parámetro de texto dentro de los 500 caracteres: limita los parámetros de texto dinámicos a lo que el correo realmente necesita.
2. Spam a tu propia bandeja de entrada
Sección titulada «2. Spam a tu propia bandeja de entrada»Ataque. Un script inunda la plantilla de tu formulario de contacto con basura.
Qué hace Frontmail. Límite por IP (por defecto 10 solicitudes / 60 s; IPv6 se cuenta por red /64), límites por clave y por organización, detección de anomalías, comprobaciones en el servidor de navegadores headless y de la lista de bloqueo, y CAPTCHA opcional por plantilla.
Qué deberías hacer. Activa Exigir CAPTCHA (Turnstile) en los formularios públicos. Usa la lista de bloqueo para valores de spam conocidos.
Riesgo restante. Sin CAPTCHA, un atacante paciente que vaya rotando direcciones IP consigue esquivar los límites. Con CAPTCHA tiene que pagar a un servicio de resolución por cada correo.
3. Llamar a la API desde un script o una «app» falsa
Sección titulada «3. Llamar a la API desde un script o una «app» falsa»Ataque. El atacante envía solicitudes sin navegador, con un Origin falsificado o sin él.
Qué hace Frontmail. Las solicitudes sin Origin ni Referer (lo típico de un script) se
rechazan salvo que hayas activado Permitir apps móviles, también cuando tu lista de orígenes
está vacía. Solo las organizaciones con esa opción usan la CAPTCHA móvil compartida de Frontmail;
todas las demás tienen que superar tu propio widget de Turnstile, y su token debe haberse emitido en
el dominio desde el que llega la solicitud.
Qué deberías hacer. Deja Permitir apps móviles desactivado salvo que tengas una app nativa. El código de servidor debería usar la clave privada.
Riesgo restante. Un Origin falsificado sigue superando la lista de orígenes permitidos; lo que
lo frena son la CAPTCHA y los límites (consulta el punto 2).
4. Agotar tus créditos o tu tarjeta
Sección titulada «4. Agotar tus créditos o tu tarjeta»Ataque. Con tu clave pública, el atacante envía tantos correos como permitan los límites para quemar tu cuota mensual y, si pudiera, tu sobregiro y tus recargas automáticas.
Qué hace Frontmail.
- El tráfico con clave pública no usa el sobregiro y no activa la recarga automática salvo que lo permitas expresamente (Facturación → Gasto del tráfico con clave pública).
- La cola de correos retenidos tiene un tope; por encima de él, las solicitudes se rechazan en lugar de ponerse en cola, para que la basura no se coma los créditos que compres más adelante.
- La recarga automática tiene un número máximo de recargas y un tope de gasto mensuales.
Qué deberías hacer. Mantén los valores por defecto, usa CAPTCHA y vigila los correos sobre anomalías.
Riesgo restante. La basura que consiga pasar la CAPTCHA y los límites todavía puede gastar tu cuota habitual y tus paquetes de créditos. Eso te cuesta créditos, no dinero extra.
5. Bloquear tu formulario a los visitantes reales
Sección titulada «5. Bloquear tu formulario a los visitantes reales»Ataque. Una avalancha barata de solicitudes no válidas agota los límites de tu organización y
los visitantes reales reciben 429.
Qué hace Frontmail. Los límites de toda la organización y la detección de anomalías solo cuentan las solicitudes que han superado las comprobaciones de plantilla y CAPTCHA; antes de eso solo se aplican el límite por IP y una protección generosa contra avalanchas.
Riesgo restante. Una avalancha distribuida y grande aún puede ralentizar las cosas; el firewall perimetral (WAF) absorbe la mayor parte.
6. Saltarse el firewall
Sección titulada «6. Saltarse el firewall»Ataque. Llamar directamente a los servidores de Frontmail en lugar de pasar por la CDN, para saltarse el firewall de aplicaciones web y falsificar la dirección IP del cliente.
Qué hace Frontmail. Los servidores solo aceptan solicitudes que han pasado por nuestra CDN y solo se fían de la dirección IP del cliente que indica la CDN. No tienes que configurar nada.
7. Una clave privada filtrada
Sección titulada «7. Una clave privada filtrada»Ataque. La clave privada acaba en código del navegador (a menudo tras migrar desde EmailJS, cuyo
accessToken es una clave privada) y alguien la copia.
Qué hace Frontmail. Los SDK de navegador se niegan a funcionar con una clave privada
(private_key_in_browser), y la API rechaza las solicitudes con clave privada que llegan desde una
página web salvo que hayas activado Permitir claves privadas en navegadores. Las claves privadas
solo se guardan como hashes.
Qué deberías hacer. No pongas nunca sk_… en código frontend ni en variables VITE_ /
NEXT_PUBLIC_. Si se ha filtrado, rótala de inmediato.
Riesgo restante. Quien tenga tu clave privada puede enviar sin CAPTCHA y leer tu historial de mensajes (incluidos los envíos de formularios). Protégela como una contraseña.
8. Adjuntos peligrosos
Sección titulada «8. Adjuntos peligrosos»Ataque. Enviarte malware a ti o a un destinatario dinámico como adjunto.
Qué hace Frontmail. Los adjuntos desde el navegador están desactivados salvo que la plantilla
los permita. Los ejecutables, scripts, HTML/SVG, imágenes de disco, archivos de Office con macros y
tipos similares se bloquean, también cuando se esconden tras trucos como invoice.pdf.exe.,
caracteres de derecha a izquierda o caracteres invisibles. Las subidas con clave pública tienen un
límite de volumen diario.
Riesgo restante. Los documentos corrientes (PDF, DOCX) todavía pueden llevar contenido malicioso; el antivirus de tu cliente de correo es la última barrera.
9. Inyectar HTML o scripts en el correo
Sección titulada «9. Inyectar HTML o scripts en el correo»Ataque. Meter <script>, píxeles de seguimiento o un formulario falso en un parámetro.
Qué hace Frontmail. Los parámetros siempre se escapan como HTML (incluso con {{{ }}}), los
parámetros html se sanean con una lista de elementos permitidos y no pueden escapar de los
atributos, las URL peligrosas se neutralizan, los saltos de línea se eliminan de las cabeceras (sin
inyección de cabeceras) y las claves que contaminan el prototipo se descartan.
10. Acosar a una persona (mail bombing)
Sección titulada «10. Acosar a una persona (mail bombing)»Ataque. Usar una plantilla con destinatario dinámico para enviar muchos correos a una misma dirección.
Qué hace Frontmail. Límite diario por destinatario (5 por defecto), compartido con las respuestas automáticas; lista de supresión para las direcciones que han rebotado o han presentado quejas.
11. Hacerse con tu cuenta del panel
Sección titulada «11. Hacerse con tu cuenta del panel»Ataque. Adivinar la contraseña, robar la sesión, robar el buzón.
Qué hace Frontmail. Límites de intentos de inicio de sesión, autenticación en dos pasos exigida en todos los métodos de inicio de sesión, enlaces de restablecimiento de contraseña de un solo uso que cierran la sesión en todos los dispositivos, cambios de correo confirmados desde la dirección antigua, avisos de dispositivos nuevos, roles con el mínimo privilegio y un registro de auditoría.
Qué deberías hacer. Activa la 2FA y da a cada compañero el rol más bajo que le sirva.
12. Robar los envíos de tus formularios
Sección titulada «12. Robar los envíos de tus formularios»Ataque. Leer el historial de mensajes o los archivos de otros.
Qué hace Frontmail. El historial solo se puede leer con la clave privada o siendo miembro de tu organización; toda consulta se limita a tu organización, incluidos los archivos adjuntos a las plantillas.
13. Eventos de entrega falsificados
Sección titulada «13. Eventos de entrega falsificados»Ataque. Enviar eventos falsos de «rebotado» o «queja» para meter a tus clientes en la lista de supresión.
Qué hace Frontmail. Los webhooks de los proveedores se verifican por firma cuando el proveedor lo admite y siempre mediante un token secreto en la URL; un evento solo afecta al destinatario real del mensaje.
Qué deberías hacer. Configura la clave de firma de tu proveedor cuando esté disponible.
14. Un SDK comprometido
Sección titulada «14. Un SDK comprometido»Ataque. Código malicioso en el script que carga tu sitio web.
Qué hace Frontmail. Las versiones se compilan sin secretos, se publican con procedencia verificable (provenance) y las acciones de CI están fijadas a versiones exactas.
Qué deberías hacer. Carga el SDK desde una URL con versión y un atributo integrity
(consulta SDK de navegador), o empaqueta el paquete de npm en tu build.
15. Frontmail usado por delincuentes
Sección titulada «15. Frontmail usado por delincuentes»Ataque. Un sitio de phishing usa su propia cuenta de Frontmail para enviarse a sí mismo contraseñas robadas; esto le pasa a cualquier servicio de este tipo.
Qué hace Frontmail. Correo del propietario verificado, supervisión del tráfico inusual y suspensión rápida de las cuentas denunciadas. Denuncia los abusos en abuse@frontmail.dev.
Lo que queda en tus manos: lista de comprobación
Sección titulada «Lo que queda en tus manos: lista de comprobación»- Rellena Sitios web permitidos con tus dominios.
- Añade tus propias claves de Turnstile y exige CAPTCHA en los formularios públicos.
- Usa destinatario dinámico solo donde lo necesites; rellena Dominios de enlaces permitidos.
- Deja Permitir apps móviles y Permitir claves privadas en navegadores desactivados salvo que los necesites.
- Clave privada solo en el servidor; rótala si tienes dudas.
- Mantén desactivados el sobregiro y la recarga automática para la clave pública (valor por defecto).
- Activa la 2FA para todo tu equipo.
- Carga el SDK desde una versión fijada con
integrity.