
Técnicas de JS para evadir la seguridad.
De Blobs y Base64: Cómo los atacantes usan técnicas de JavaScript para evadir la seguridad corporativa
¡Hola a todos!
Hace poco, analizando un incidente de phishing en el trabajo, me topé con un script de JavaScript que me pareció una joya técnica de Threat Intelligence. Los atacantes ya no solo hacen páginas web falsas; ahora utilizan APIs nativas del navegador y lógicas de frontend avanzadas para engañar tanto a los usuarios como a los sistemas de seguridad más estrictos.
Hoy quiero desarmar este ataque (completamente anonimizado y sanitizado) para que veamos cómo funciona y qué podemos aprender de él.
El Código bajo la Lupa
A primera vista, la víctima recibe un correo con un enlace que apunta a una plataforma legítima de hosting, al entrar el navegador ejecuta un script que contiene esta lógica principal:
// --- Payload acortado para demostración ---
var encoded = "CjxodG1sIGx...[FRAGMENTO TRUNCADO POR SEGURIDAD]";
// 1. Extrae el correo de la víctima desde la URL
var emailHash = window.location.hash || '';
function launchBlob() {
// 2. Decodifica el HTML oculto (en este caso, un login falso de Google)
var decoded = atob(encoded);
// 3. Crea un archivo HTML "fantasma" en la memoria del navegador
var blob = new Blob([decoded], { type: 'text/html' });
var blobUrl = URL.createObjectURL(blob);
// 4. Redirecciona sin generar alertas de red convencionales
window.location.replace(blobUrl + emailHash);
}
A esto se le suma una lógica en el frontend que requiere que el usuario interactúe con un botón de "Mantén presionado para verificar" durante 2 segundos para que la función launchBlob() finalmente se dispare.

¿Por qué los atacantes se toman tantas molestias en lugar de hacer una redirección simple? Vamos a desglosarlo en tres conceptos clave de ciberseguridad.
La Anatomía del Ataque: Técnicas de Evasión
1. El truco del botón (Anti-Sandbox / Antianálisis)
La página inicial obliga al usuario a mantener presionado un botón para avanzar. Esto no es una decisión de diseño o UX. Las herramientas de seguridad de correo (como pasarelas de seguridad o sandboxes automatizados) abren los enlaces de los correos, esperan unos segundos a que carguen, inspeccionan el DOM estático y, si no ven nada raro, clasifican la URL como segura.
Al requerir una acción humana continua y compleja (un evento mousedown o touchstart sostenido por 2000 ms), los sistemas automatizados se rinden y el ataque pasa desapercibido.
2. Ofuscación básica con base64
El código del phishing (el formulario falso que roba credenciales) viaja completamente oculto dentro de la variable encoded. No es cifrado, es simple ofuscación con atob(). El objetivo es evitar que los inspectores de código o firmas estáticas de antivirus detecten palabras clave como password, form action=, o inputs de inicio de sesión dentro del script inicial.
3. Evasión de red mediante Blob URLs (URL.createObjectURL)
Esta es la parte más elegante desde el punto de vista del atacante. En lugar de redirigir al usuario a un dominio malicioso externo para mostrar el login falso, el script decodifica el Base64, crea un objeto Blob de tipo text/html y genera una URL local en memoria: blob:https://....
El impacto: Los firewalls y proxies corporativos monitorean el tráfico de red. Si el navegador no realiza una petición GET externa para descargar ese HTML malicioso, no hay tráfico de red que bloquear. El phishing se construye en caliente, dentro de la memoria del propio navegador de la víctima.
4. Hiper-personalización (Auto-Grab)
Al concatenar window.location.hash, el script arrastra el correo electrónico de la víctima que venía en el enlace original y se lo pasa al Blob. Cuando el login falso se renderiza, el campo de "Usuario" o "Correo" ya aparece pre-rellenado. Esto rompe la desconfianza de la víctima, incrementando drásticamente el éxito del ataque.

¿Cómo nos protegemos de esto? (Medidas de Mitigación)
Como desarrolladores y profesionales de TI, este tipo de ataques nos demuestra que la seguridad perimetral tradicional (bloquear IPs o dominios) ya no es suficiente. Aquí hay medidas clave para mitigar y protegernos:
Para Equipos de Seguridad y SysAdmins
Monitoreo de esquemas URL no estándar: Implementar políticas de seguridad en los navegadores corporativos (a través de GPO o MDM) o herramientas de EDR que detecten o bloqueen la ejecución de redirecciones hacia esquemas de URL sospechosos como blob: o data: cuando provienen de sitios externos no autorizados.
Aislamiento del Navegador (Browser Isolation): Las tecnologías de Remote Browser Isolation (RBI) ejecutan el código de sitios desconocidos en contenedores aislados en la nube, destruyendo el Blob antes de que pueda interactuar con el endpoint real del usuario.
Autenticación FIDO2 / WebAuthn (Llaves físicas/Passkeys): La mejor defensa contra el phishing de credenciales. Aunque el atacante logre renderizar el formulario perfecto de Google usando un Blob, una llave física de seguridad (o Windows Hello / Touch ID) valida el dominio real del navegador. Como la URL del blob no coincide con el dominio legítimo de Google, el navegador se niega a firmar la solicitud y el ataque falla.
Para Desarrolladores (Buenas Prácticas de Frontend)
Content Security Policy (CSP): Si manejas plataformas donde los usuarios o terceros pueden subir scripts, define cabeceras CSP estrictas. Configurar directivas como object-src 'none' y restringir los orígenes permitidos en script-src evita que scripts maliciosos abusen de la creación de objetos dinámicos.
Sanitización en el manejo de hashes: Si tu aplicación legítima lee datos de window.location.hash para flujos de trabajo, asegúrate de sanitizar rigurosamente las entradas para evitar inyecciones de código (XSS) u otras manipulaciones del DOM.
Conclusión
El frontend moderno es sumamente potente, y los atacantes lo saben. Ver cómo herramientas nativas como los Blobs, que nosotros usamos para generar PDFs dinámicos o procesar imágenes en el cliente, son reutilizadas para armar laboratorios de phishing indetectables es un recordatorio de que la seguridad debe ser multicapa.
¿Qué opinas? Únete a la conversación en nuestro Discord y comparte tu perspectiva.