Saltar al contenido
Development

Cerrar la puerta que nadie usaba

Por Victor Da Luz
securitydnsemaildev-logsite

Un spike de seguridad de hace algunas semanas encontró algo pequeño pero real: imperfectsystems.com no tenía registro SPF ni DMARC. El dominio no envía correo, la bandeja de entrada real vive en mail.imperfectsystems.com, gestionada por SimpleLogin, que ya estaba configurada correctamente, pero el dominio raíz desnudo estaba completamente abierto. Cualquiera podía falsificar un correo que dijera venir de anything@imperfectsystems.com, y nada impedía que llegara a una bandeja de entrada con apariencia legítima.

La solución para un dominio que nunca envía correo es un registro SPF nulo, v=spf1 -all, que dice, sin ambigüedad, “ningún servidor está autorizado a enviar correo desde este dominio, punto.” Al combinarlo con una política DMARC de p=reject, queda dicho para todo servidor de correo receptor: si algo dice venir de aquí y falla ese chequeo, se descarta.

La parte que tomó más tiempo que los propios registros DNS fue averiguar cómo agregarlos realmente. Ninguno de los tokens de API de Cloudflare que ya estaban en el vault del homelab podía editar DNS, uno estaba limitado a un dominio completamente distinto, otro podía leer zonas pero no escribir registros. Crear un token nuevo requiere el panel de Cloudflare directamente, no existe una vía de API para crear un token de API desde cero. Así que en lugar de dar toda la vuelta de aprovisionar nuevo acceso de infraestructura por lo que equivale a dos entradas DNS, ganó la opción más simple: agregarlas a mano en el panel, lo cual toma unos noventa segundos una vez que se sabe exactamente qué escribir.

Verificado con dig inmediatamente después, ambos registros resolvieron como se esperaba, y luego se comprobó lo único que realmente importaba: que la bandeja de entrada real en el subdominio no se hubiera tocado. No se tocó. Los registros SPF, DMARC y MX están delimitados por nombre de host, no se heredan del dominio superior, así que mail.imperfectsystems.com conservó su propia configuración independiente de SimpleLogin todo el tiempo. Dos registros, un comando para verificar, ningún riesgo para nada que ya estuviera funcionando.

Lecturas relacionadas

Development

El bug detrás del bug

Un widget de GitHub roto, rastreado hasta una demo del proyecto original en pausa, y, encontrado en el camino, una CSP fijada por hash invalidada en silencio por un arreglo de accesibilidad de una sola línea.

Leer