Clone2Leak: Tus credenciales de Git nos pertenecen


El investigador de Seguridad @Ryotkak de GMO detecto una vulnerabilidad en GitHub Desktop, que permitiría a un repositorio malicioso exfiltrar las credenciales del usuario.

Git implementa un protocolo para recuperación de credenciales llamado git credential protocol, el cual su implementación presenta debilidades que permite la fuga de información de diferentes maneras.

Protocolo de credenciales de Git

Al recuperar credenciales del asistente de credenciales, Git envía un mensaje como el siguiente al asistente de credenciales:
protocol=https
host=github.com
A continuación, el asistente de credenciales devuelve un mensaje como el siguiente:
protocol=https
host=github.com
username=USERNAME
password=PASSWORD
Cada mensaje se separa por un carácter de nueva línea () y se analiza tanto en Git como en el asistente de credenciales.
Para evitar la inyección de propiedades, Git prohíbe explícitamente el carácter de nueva línea y el byte NULL en el nombre y el valor de la propiedad.

"Usando una URL maliciosamente diseñada, es posible hacer que la solicitud de credenciales proveniente de Git sea malinterpretada por Github Desktop, de modo que enviará credenciales para un host diferente al host con el que Git se está comunicando actualmente, lo que permite la exfiltración secreta", dijo GitHub en un aviso.

La amenaza detrás del protocolo de credenciales de Git

El artículo expone cómo ciertas herramientas manejan de manera inadecuada los mensajes del protocolo de credenciales de Git. Una de las vulnerabilidades más significativas fue identificada en GitHub Desktop, específicamente en su ayudante de credenciales llamado "trampoline". Esta herramienta contiene una función destinada a descomponer entradas en pares clave-valor:

export const parseCredential = (value: string) => {
  const cred = new Map<string, string>()
  for (const [, k, v] of value.matchAll(/^(.*?)=(.*)$/gm)) {
    if (k.endsWith('[]')) {
      let i = 0
      let newKey
      do {
        newKey = `${k.slice(0, -2)}[${i}]`
        i++
      } while (cred.has(newKey))
      cred.set(newKey, v)
    } else {
      cred.set(k, v)
    }
  }
  return cred
}

La función parseCredential utiliza una expresión regular para buscar patrones en el formato clave=valor y convertirlos en un mapa de claves y valores. Sin embargo, el análisis falla al no gestionar correctamente ciertos caracteres, como los retornos de carro (\r). Esto abre una puerta para que actores maliciosos manipulen las entradas y, eventualmente, inyecten valores maliciosos que el sistema podría interpretar incorrectamente, resultando en una fuga de credenciales.

Impacto en otras herramientas

Además de GitHub Desktop, el autor descubrió problemas similares en herramientas como Git Credential Manager y Git LFS, donde el manejo deficiente de entradas dentro del protocolo de credenciales también genera riesgos de seguridad. Estas vulnerabilidades demuestran que, sin una validación adecuada de las entradas, las credenciales almacenadas pueden quedar expuestas a ataques.

CVE-2025-23040: GitHub Desktop y la expresión regular inadecuada que permite el robo de información en retornos de carro

En GitHub Desktop, el ayudante de credenciales "trampoline" utiliza una expresión regular para analizar los mensajes del protocolo de credenciales. Sin embargo, esta expresión no maneja correctamente los caracteres de retorno de carro (\r), lo que permite a un atacante inyectar entradas maliciosas que pueden provocar la fuga de credenciales.

CVE-2024-50338: Uso inadecuado de StreamReader en Git Credential Manager que permite el la exfiltración de datos con retornos de carro ("\r")

Git Credential Manager emplea StreamReader para leer los mensajes del protocolo de credenciales. Debido a una gestión incorrecta de los caracteres de retorno de carro, un atacante puede manipular las entradas para inyectar datos maliciosos, lo que podría resultar en la exposición de credenciales.

CVE-2024-53263: Inyección de nueva línea en Git LFS que provoca la fuga de credenciales

Git LFS presenta una vulnerabilidad donde es posible inyectar caracteres de nueva línea en las entradas procesadas. Esta falla permite a un atacante manipular las entradas de manera que las credenciales se filtren a destinos no deseados.

CVE-2024-52006: Mitigación de defensa en profundidad en Git

Esta vulnerabilidad se refiere a una mitigación implementada en Git para mejorar la seguridad general del sistema. Aunque no se detalla una falla específica, la mitigación busca fortalecer la protección contra posibles vectores de ataque relacionados con el protocolo de credenciales.

CVE-2024-53858: GitHub CLI filtra el token de acceso a hosts arbitrarios

En GitHub CLI, existe una vulnerabilidad que permite que los tokens de acceso se filtren a hosts no autorizados. Un atacante podría explotar esta falla para obtener credenciales sensibles y comprometer la seguridad de los repositorios del usuario.


Clone2Leak: Your Git Credentials Belong To Us - GMO Flatt Security Research

Si te gusta este contenido, no olvides seguirnos en nuestras redes sociales!: