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 GitAl 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.
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