BotNetwork

Cómo proteger los tokens de tu bot: almacenamiento, rotación y qué hacer tras una filtración

Un token de bot no es un identificador. Es la contraseña del bot, y quien lo tenga puede hacer todo lo que el bot puede hacer.

Publicado 4 min de lectura

Por qué los tokens merecen cuidado especial

Los tokens de las plataformas dan control total de la cuenta del bot. Con un token de bot de Telegram, cualquiera puede leer las actualizaciones que recibe el bot y enviar mensajes como él. Un token de bot de Discord puede actuar en todos los servidores a los que se unió el bot, con todos los permisos que se le dieron. Un token de bot de Slack tiene todos los scopes de la app en ese workspace.

Las filtraciones rara vez son espectaculares. Vienen de un .env subido por accidente, una captura de pantalla en un chat de soporte, una línea de log que imprime la URL de la petición (los tokens de Telegram son parte de la URL) o un log público de CI.

Guárdalos bien

  • Nunca en el código ni en el repositorio. Usa el almacén de secretos de tu hosting o variables de entorno inyectadas al ejecutar.
  • Separados por entorno. Desarrollo, staging y producción tienen cada uno su propio bot y su token. Un token de prueba filtrado no debe tocar a usuarios reales.
  • Fuera de URLs y logs. Oculta los tokens en tu logger y en los reportes de errores. Nuestro asistente de tokens busca formatos de token comunes en un texto antes de que lo pegues en cualquier lado.
  • Limita quién puede leerlos. En CI, limita los secretos de producción solo al job de despliegue a producción.

Concede lo mínimo

El daño de una filtración equivale a los permisos que concediste. Pide solo los permisos e intents de Discord que usas, solo los scopes de Slack que necesitas y derechos de administrador en grupos de Telegram solo si el bot modera. La calculadora de permisos genera invitaciones y manifests mínimos.

Detecta las filtraciones pronto

  • Activa el escaneo de secretos y la protección al hacer push en tus repositorios. La protección al hacer push de GitHub bloquea commits que contienen formatos de token compatibles.
  • Varias plataformas participan en el programa de socios de escaneo de secretos de GitHub, que permite avisar al proveedor cuando sus tokens aparecen en repositorios públicos; Discord y Slack están entre los socios listados. No dependas de eso: escanea antes de hacer push.
  • Agrega un escáner como Gitleaks o TruffleHog a tu CI.
  • Configura alertas ante comportamientos raros del bot: mensajes que no enviaste, URLs de webhook que no configuraste, errores 401 repentinos (alguien más pudo haber rotado el token).

Rota sin caídas

Planea la rotación antes de necesitarla:

  1. Haz que el bot lea su token de la configuración al arrancar, nunca del código.
  2. Genera un token nuevo en la plataforma.
  3. Actualiza el secreto en tu hosting y reinicia o vuelve a desplegar.
  4. Confirma que el bot funciona y asegúrate de que el token anterior ya no es válido.

La mayoría de las plataformas de bots invalidan el token anterior en cuanto generas uno nuevo (/revoke de Telegram, Reset Token de Discord), así que los pasos 2 y 3 deben ocurrir en pocos minutos. Para secretos de webhook que tú controlas, acepta dos secretos válidos durante un traslape corto.

Si se filtró un token: la lista

  1. Primero revoca. Telegram: /revoke en @BotFather. Discord: Developer Portal, Bot, Reset Token. Slack: rota o reinstala en la configuración de la app. GitHub: elimina el token.
  2. Despliega el token nuevo desde tu almacén de secretos.
  3. Revisa qué pasó durante la exposición: mensajes enviados, cambios en la URL del webhook (getWebhookInfo de Telegram), servidores a los que se unió, archivos consultados.
  4. Encuentra la causa y corrígela: agrega el archivo a .gitignore, oculta datos en el logger, restringe los secretos de CI.
  5. Reescribe el historial solo después de rotar. Los forks, clones y cachés conservan el commit anterior, así que reescribir el historial no deshace la filtración.
  6. Avisa a los usuarios afectados si sus datos pudieron leerse.

Los secretos de webhook también son tokens

El secret_token de Telegram, el signing secret de Slack y el app secret de Meta prueban que las peticiones vienen de la plataforma. Trátalos con el mismo cuidado, compara firmas en tiempo constante y rechaza peticiones con timestamps viejos.

Fuentes