Uno siempre cree que no le va a pasar. Que si sos técnico, que si sabés de seguridad, que si venís curtido… hasta que un día estás a mil, resolviendo problemas reales, y zas: hacés click. Eso me pasó. Y como creo que la mejor forma de prevenir es exponer, vengo a contarte con lujo de detalles cómo me comí un phishing tan bien pensado que parecía legítimo hasta para alguien que duerme con el Wireshark bajo la almohada (fuá!!!).

El anzuelo: un correo que te agarra desprevenido

Estábamos en pleno quilombo de deploy, con tráfico real en SendGrid, APIs tirando humo y notificaciones volando por todos lados. En ese contexto, entra un mail con asunto: “Your API Key has been Paused!”

Lo abro. Logo de Twilio SendGrid, tono urgente pero creíble, lenguaje técnico. Nada desentonaba.

Y yo, con el dedo ya en el mouse, sin levantar la guardia, hago click en el botón “Resolve Issues Now”. Hasta ahí, ni una red flag.

Spoiler: todas las red flags estaban en la URL y en el minúsculo texto que dice de donde viene el email.

La trampa: Clon perfecto, timing perfecto

El botón me redirige a https://grid.ssg-gateway.com/login.html. Un dominio que, en otra situación, habría olido raro al toque. Pero el diseño del sitio era impecable: logo, layout, reCAPTCHA trucho, todo calcado al login real de SendGrid.

¿La jugada maestra? El timing. Estábamos justo lidiando con problemas reales de tráfico en producción, así que la excusa del “rate limit” cerraba por todos lados.

En mi cabeza, estaba entrando a chequear un error, no a entregar mis credenciales.

Ingresé usuario y clave. Envié. Y ahí pasó lo interesante: no hubo redirección, ni error. Nada. Pero en el formulario no mandaba los datos a un backend típico. No. Lo que hacía era más artesanal, más noventoso… más trucho: un POST directo a la API de Telegram.

Sí, así como leés. El atacante había armado un bot con este endpoint:

https://api.telegram.org/bot7271186371:AAGuye4N0BBHcsxE2jb3xkPMavSQIWYXSSQ/sendMessage
New Login Attempt:
Username: ...
Password: ...
Session ID: ...

Y de yapa, te tiraba unos botones inline para “aceptar con Auth”, “SMS”, “Decline”, o hasta un irónico “LOL”. Básicamente, un panel de administración low-cost con UX de Telegram.

La revancha: ensuciando el bot del atacante

Cuando descubrimos que el bot estaba usando Telegram como backend, lo primero que hicimos fue ver si el canal era accesible.

Con un simple:

curl 'https://api.telegram.org/bot7271186371:AAGuye4N0BBHcsxE2jb3xkPMavSQIWYXSSQ/getUpdates?offset=999999999'

podías ver el feed en tiempo real de todas las credenciales que el atacante iba robando. Un desfile de víctimas cayendo una tras otra.

Y ahí nos picó el bicho: ¿qué pasa si empezamos a tirar data falsa? Así que con un script empezamos a mandarle credenciales ridículas, basura, cientos por minuto. La idea era simple: ensuciarle el timeline, enterrar las credenciales reales, frustrarle el parsing, romperle el sistema.

Y de paso, con lo que veíamos, intentamos avisar a las víctimas cuando se podía, antes de que les revienten sus cuentas.

Pequeña venganza, pero algo es algo.