cd ~/blog

~/vulns/git-history-secret-exposure.md

Git History Secret Exposure

rceautor: Jordy Pérez Osorio aviso legal
Gitsecret-disclosuresource-code

~2 min de lectura


1. Descripción técnica

Git History Secret Exposure ocurre cuando una credencial, clave o token se incorpora a un commit accesible. Eliminarlo en un commit posterior sólo cambia el estado actual del árbol; el objeto anterior y su diferencia continúan formando parte del historial mientras sigan siendo alcanzables o estén presentes en clones y copias.

git log permite localizar cambios y git show <commit> presenta el objeto o diff asociado. Por eso, revisar únicamente los archivos actuales no determina si un secreto fue publicado antes.

// renderizando diagrama…

2. Impacto

El material recuperado puede permitir autenticación, acceso a APIs, descifrado o suplantación según su tipo y vigencia. Reescribir el historial reduce la exposición futura, pero no revoca copias ya clonadas. Una credencial encontrada debe considerarse comprometida aunque luego se elimine del repositorio.

3. Condiciones necesarias

  1. El secreto fue almacenado en un objeto o commit de Git.
  2. El atacante puede leer el repositorio, su directorio .git, un bare repository o un clon.
  3. El objeto todavía puede recuperarse desde referencias, reflogs o datos no depurados.
  4. Para impacto operativo, el secreto continúa siendo válido o permite acceder a información histórica sensible.

4. Validación y detección

La revisión combina búsqueda del estado actual con historial y diffs. Se pueden examinar nombres sospechosos, patrones de claves, cambios que eliminaron archivos y objetos alcanzables. La evidencia debe registrar el commit y el tipo de secreto sin publicar su valor completo.

Las herramientas de secret scanning deben ejecutarse antes del commit y también sobre todo el historial. Los controles del servidor deben bloquear nuevos secretos, pero no reemplazan la rotación de material ya expuesto.

5. Explotación documentada en los writeups

5.1. 128-devoops

El repositorio bare de Gitea se copia y se inspecciona localmente. Un commit cuyo mensaje indica una eliminación conserva en su diff una clave privada SSH. git show recupera esa clave, que continúa siendo válida para la cuenta hana.

6. Mitigación

  • Rotar y revocar inmediatamente cualquier secreto confirmado en el historial.
  • Usar gestores de secretos y mantener credenciales fuera del repositorio.
  • Aplicar secret scanning en pre-commit, CI y servidor Git.
  • Reescribir el historial con una herramienta adecuada y coordinar la eliminación de clones y forks.
  • Proteger repositorios bare, backups, artefactos de CI y directorios .git.
  • Documentar que borrar el archivo en un nuevo commit no elimina su exposición previa.

7. Clasificación

8. Referencias y conexiones

// relacionados