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
- El secreto fue almacenado en un objeto o commit de Git.
- El atacante puede leer el repositorio, su directorio
.git, un bare repository o un clon. - El objeto todavía puede recuperarse desde referencias, reflogs o datos no depurados.
- 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
- CWE-200: Exposure of Sensitive Information
- CWE-312: Cleartext Storage of Sensitive Information
- Impacto contextual según el secreto recuperado.