https://a.storyblok.com/f/270183/1368x665/f7d37747ed/25feb_dev-blog_secret-token-git-history.png

Cómo eliminar un token secreto de tu historial Git

Publicado el February 11, 2025

Tiempo de lectura: 3 minutos

Introducción

En este artículo, aprenderás cómo eliminar de forma segura los tokens de autenticación expuestos de todo el historial de tu repositorio Git utilizando BFGuna potente herramienta de limpieza. También entenderás los riesgos de seguridad de los secretos comprometidos y dominarás el proceso paso a paso para desinfectar tu repositorio de código y proteger los activos digitales de tu organización. ¡Vamos a empezar!

La inesperada alerta de seguridad

Imagínatelo: Eres desarrollador y estás inmerso en un importante sprint cuando, de repente, recibes un ticket de JIRA en tu bandeja de entrada. El asunto te da escalofríos: "Problema de seguridad crítico - Token NPM expuesto en el historial del repositorio".

El análisis de seguridad automatizado ha descubierto algo alarmante: un token de autenticación enviado accidentalmente al repositorio hace años, enterrado en commits de hace 4, 7 y 8 años. Puede parecer historia antigua, pero en el mundo de la ciberseguridad, los viejos secretos pueden ser bombas de relojería. Y tu CISO puede ser muy insistente en resolver estos problemas (con mérito...).

Vale, ya puedes dejar de imaginar porque esto nos ha pasado a nosotros en Vonage. Afortunadamente, puedes aprender de nuestra experiencia.

Los riesgos ocultos de los tokens expuestos

Un token de autenticación expuesto es algo más que un descuido menor. Representa una importante vulnerabilidad de seguridad que podría:

  • Permitir el acceso no autorizado a registros de paquetes privados

  • Exponer la infraestructura sensible de la empresa

  • Proporcionar un punto de entrada potencial para agentes maliciosos

  • Riesgo para la propiedad intelectual de la empresa

  • Infringir potencialmente los requisitos de cumplimiento

El daño a la reputación de una violación de la seguridad puede superar con creces la conveniencia momentánea de un token cometido apresuradamente.

Lo primero que hay que hacer en tal caso es "rotar" la(s) clave(s) secreta(s) implicada(s). Anularlas y crear otras nuevas. Pero el riesgo no acaba ahí, porque como alguien dijo en una discusión de un grupo de JavaScript, las viejas claves obsoletas podrían contener una pista sobre el propio algoritmo del generador de claves. No soy un experto en ciberseguridad (ni de lejos), así que me quedo con las palabras de los expertos. Entonces, ¿cómo nos deshacemos de la clave expuesta en el repositorio?

Entra en BFG: Tu mejor amigo para limpiar el historial de Git

¿La solución? BFG (Big Fast Git), una potente herramienta diseñada para limpiar los historiales de los repositorios Git de forma rápida y eficaz. Aquí tienes una guía paso a paso para la eliminación de tokens:

  1. Dígale a todos los que están trabajando en el repositorio que retengan su trabajo durante unos minutos hasta que usted empuje sus cambios.

  2. Descarga BFG y cd en su carpeta.

  3. Clonar el repositorio con un espejo:

    git clone --mirror https://github.com/your-name/your-repo.git

    Te sugiero que lo hagas dos veces en dos carpetas diferentes para que tengas una copia de seguridad de tu repositorio "antiguo" si algo va mal.

  4. Cree un archivo tokens.txt con la sintaxis de sustitución:

    old_token1==>PLACE_HOLDER1
    old_token2==>PLACE_HOLDER2
    ...

    Esto le dirá a BFG que sustituya cualquier instancia de las fichas antiguas por sus marcadores de posición.

    Un ejemplo sería:

    ab23234-89723c-aa7b7c==>${NPM_TOKEN}
    
  5. Ejecute BFG con el archivo de sustitución (asegúrese de que se encuentra en la carpeta principal del repositorio):

    java -jar bfg-1.14.0.jar --replace-text tokens.txt your-repo.git --no-blob-protection
  6. Limpiar el repositorio:

    cd your-repo.git
    git reflog expire --expire=now --all && git gc --prune=now --aggressive
  7. Comprueba que el token ha sido reemplazado clonando la réplica local y "grepeándola":

    cd .. && git clone your-repo.git && cd your-repo && git grep -n "REPLACE _WITH_YOUR_TOKEN

    Si esto devuelve 0 resultados, significa que funcionó.

  8. Fuerza los cambios:

    cd your-repo.git
    git push --mirror

  9. Diles a tus compañeros que busquen y apliquen los cambios:

    git fetch
    git reset --hard origin/main 

Ya está. Tu repositorio ya está limpio. A partir de ahora, supongo que la misma herramienta que te alertó sobre los tokens puede dar la alarma durante un proceso de RP antes de que el token se "extienda" a la rama principal. Asegúrate de que lo hace 😉

Consejos profesionales para la gestión de fichas

  • Nunca envíe tokens directamente a los repositorios

  • Utilizar variables de entorno o herramientas seguras de gestión de secretos

  • Implementar ganchos pre-commit para evitar commits accidentales de tokens.

  • Audit periódico del historial de repositorios

  • Rote las fichas periódicamente, sobre todo si sospecha que están expuestas.

Reflexiones finales

En una era de crecientes amenazas a la ciberseguridad, la gestión proactiva de repositorios no es sólo una buena práctica, sino una necesidad. Herramientas como BFG proporcionan a los desarrolladores potentes mecanismos para limpiar errores históricos y mantener la integridad de sus repositorios de código.

Aunque nos hemos centrado en la sustitución de fichas, BFG es una herramienta versátil capaz de:

  • Eliminación de archivos grandes del historial de repositorios

  • Limpieza de información sensible

  • Reducir el tamaño del repositorio

  • Saneamiento de commits antes de proyectos de código abierto

Si se adhiere a las razones por las que debe utilizar commits convencionalesBFG puede permitirte mejorar tus antiguos commits con un texto significativo sobre la versión y el registro de cambios.

Recuerda que en el desarrollo de software, lo que se confirma no siempre es para siempre, gracias a herramientas como BFG.

Cuéntanos qué otros problemas de Git tienes en nuestro Slack de la comunidad de Vonage o envíanos un mensaje en X, antes conocido como Twitter.

Compartir:

https://a.storyblok.com/f/270183/400x400/7bf76cb05c/yonatankra.png
Yonatan KraArquitecto de software de Vonage

Yonatan ha estado involucrado en algunos proyectos impresionantes en la academia y la industria - desde C / C ++ a través de Matlab a PHP y javascript. Fue director de tecnología en Webiks y arquitecto de software en WalkMe. Actualmente es arquitecto de software en Vonage e instructor de egghead.