Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-71557-poc — Prueba de concepto local para CVE-2026-71557 que demuestra el path traversal en el almacenamiento de referencias del sistema de archivos de go-git, incluyendo la lógica de explotación y la comparación entre versiones vulnerables y corregidas. | Kitploit
Herramientas/GitHubGitHub/saku0512/cve-2026-71557-poc
Análisis de VulnerabilidadesExplotaciónPruebas de PenetraciónSeguridad de Cadena de SuministroAprendizaje y Educación
GitHubsaku0512/cve-2026-71557-poc

CVE-2026-71557-poc

Prueba de concepto local para CVE-2026-71557 que demuestra el path traversal en el almacenamiento de referencias del sistema de archivos de go-git, incluyendo la lógica de explotación y la comparación entre versiones vulnerables y corregidas.

Ver Repositorio
5hace 1 mesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-71557: PoC de path traversal en el nombre de referencia de go-git

Versión en inglés

Resumen

Este repositorio es un PoC local seguro de CVE-2026-71557, basado en el aviso público de go-git GHSA-qgq7-7hm3-q39j.

La versión anterior de storage/filesystem no validaba suficientemente el nombre de las loose references y lo usaba como ruta .git/<reference-name>. Por ello, al pasar un nombre de referencia como refs/heads/../../config, los .. se normalizan y se puede sobrescribir .git/config, que se encuentra fuera del reference storage previsto.

Este PoC invoca la API real de go-git y solo actúa sobre un .git/config simulado creado en un directorio temporal. No se conecta a servidores Git externos, no modifica repositorios existentes ni ejecuta comandos arbitrarios.

Descargo de responsabilidad

Este proyecto tiene como único fin la educación y la verificación de seguridad ética y autorizada. No lo utilice en entornos sin permiso.

Detalles de la vulnerabilidad

  • CVE ID: CVE-2026-71557
  • GitHub Advisory: GHSA-qgq7-7hm3-q39j
  • Tipo: Path Traversal (CWE-22)
  • Severidad: Media
  • CVSS v3.1: 6.3 (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:N/I:H/A:L)
  • Versiones afectadas:
    • github.com/go-git/go-git/v5 <= 5.19.1
    • github.com/go-git/go-git/v6 <= 6.0.0-alpha.4
  • Versiones corregidas:
    • v5: 5.19.2
    • v6: 6.0.0-alpha.5
  • Almacenamiento afectado: reference storage dotgit de storage/filesystem
  • Almacenamiento no afectado: storage/memory

Causa raíz

En la v5.19.1 anterior a la corrección, DotGit.SetRef pasaba el nombre de referencia directamente como nombre de archivo a setRef.

root@kitploit:~
fileName := r.Name().String()
return d.setRef(fileName, content, old)

La raíz del storage respaldado por filesystem suele ser .git. El nombre de referencia refs/heads/../../config se convierte en config tras la normalización de la ruta, por lo que la escritura del valor de la referencia se transforma en una escritura de .git/config. Si un servidor Git malicioso anuncia un nombre de referencia de este tipo y el traversal persiste tras el mapeo de refspec durante el clone/fetch, un nombre de referencia controlado por el atacante podría llegar a esta ruta de código.

La versión corregida valida el nombre de referencia en los puntos de entrada como SetRef, Ref y RemoveRef del storage de filesystem, y rechaza los nombres que se salen del reference storage.

PoC

Requisitos

  • Go 1.25 o superior, o un Go con obtención automática de toolchain habilitada
  • Conexión de red necesaria para la primera descarga de módulos

Reproducción con la versión vulnerable

go.mod está fijado a la versión vulnerable v5.19.1.

root@kitploit:~
go run .

Salida principal esperada:

root@kitploit:~
[*] go-git version: v5.19.1
[*] crafted reference: refs/heads/../../config
[*] SetReference error: <nil>
[!] VULNERABLE: .git/config was overwritten through the reference name.

El PoC realiza lo siguiente:

  1. Crea un Git storage respaldado por filesystem en un directorio temporal del sistema operativo.
  2. Escribe un marcador seguro en .git/config.
  3. Pasa una referencia hash refs/heads/../../config a SetReference.
  4. Verifica que el marcador ha sido reemplazado por el hash de la referencia.
  5. Elimina automáticamente el directorio temporal.

Comparación entre la versión vulnerable y la corregida

El siguiente script ejecuta el mismo PoC de forma secuencial con v5.19.1 y v5.19.2, usando un módulo temporal sin modificar el go.mod del repositorio.

root@kitploit:~
./scripts/run-version-matrix.sh

Resultado esperado:

root@kitploit:~
go-git v5.19.1
[!] VULNERABLE: .git/config was overwritten through the reference name.

go-git v5.19.2
[+] FIXED: the crafted reference was rejected and .git/config stayed intact.

Si desea inspeccionar los archivos temporales, añada -keep. El directorio mostrado no se eliminará automáticamente, así que elimínelo manualmente después de revisarlo.

root@kitploit:~
go run . -keep

Alcance del PoC

Este PoC invoca directamente el punto de entrada vulnerable del filesystem storage descrito en el aviso y verifica la sobrescritura de metadatos mediante path traversal. No implementa un servidor de protocolo Git malicioso ni la capa de transporte de clone/fetch.

Mitigación

Los usuarios de v5 deben actualizar a v5.19.2 o posterior, y los usuarios de v6 alpha a v6.0.0-alpha.5 o posterior. Mientras no pueda actualizar, no haga clone/fetch desde servidores Git no confiables con storage respaldado por filesystem. Las aplicaciones que usan únicamente storage/memory no se ven afectadas por esta vulnerabilidad.

Referencias

  • GHSA-qgq7-7hm3-q39j
  • go-git PR #2247 (corrección para v6)
  • go-git PR #2254 (backport para v5)
  • commit f3d0cc1 de la corrección v5
  • commit 3b306ef de seguridad adicional v5
Descargar herramienta