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
Gitea-template-sync-Path-Traversal-Privilege-Escalation-CVE-2026-38526- — PoC y write-up para la escalada de privilegios de "Nexus" en HackTheBox: servicio de sincronización de plantillas de Gitea ejecutado como root, vulnerable a path traversal mediante objetos Git falsificados. Solo para uso educativo. | Kitploit
Herramientas/GitHubGitHub/shirouuu/gitea-template-sync-path-traversal-privilege-escalation-cve-2026-38526-
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPost-ExplotaciónCTFPruebas de PenetraciónAprendizaje y EducaciónDesarrollo de Payloads

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
Labs y Práctica
GitHubshirouuu/gitea-template-sync-path-traversal-privilege-escalation-cve-2026-38526-

Gitea-template-sync-Path-Traversal-Privilege-Escalation-CVE-2026-38526-

PoC y write-up para la escalada de privilegios de "Nexus" en HackTheBox: servicio de sincronización de plantillas de Gitea ejecutado como root, vulnerable a path traversal mediante objetos Git falsificados. Solo para uso educativo.

Ver Repositorio
hace 6h 47mAún no revisado

Nexus — PoC de Escalada de Privilegios Locales

Path traversal en la sincronización de plantillas de Gitea mediante objetos Git falsificados → root

Un exploit de prueba de concepto para la escalada de privilegios en la máquina de HackTheBox Nexus. Un servicio systemd propiedad de root sincroniza los repositorios de plantillas de Gitea en disco sin sanear los nombres de las entradas, lo que permite a un usuario autenticado con bajos privilegios escribir archivos arbitrarios como root mediante directory traversal — usado aquí para implantar una clave SSH en /root/.ssh/authorized_keys.


⚠️ Aviso legal

Este código se proporciona para fines educativos y pruebas de seguridad autorizadas únicamente — es decir, entornos de laboratorio como HackTheBox, o sistemas que poseas o para los que tengas permiso explícito por escrito para probar. El uso no autorizado contra sistemas que no controlas es ilegal. El autor no asume ninguna responsabilidad por el mal uso.

Si la máquina Nexus sigue activa en HackTheBox, no publiques ni compartas este exploit — las reglas de HTB prohíben distribuir soluciones de máquinas activas.


Resumen de la vulnerabilidad

El script de sincronización lee archivos de repositorios marcados como plantillas en Gitea y los escribe en el sistema de archivos local. La ruta de destino se construye aproximadamente así:

root@kitploit:~
dest = os.path.join(base_dir, name)   # name comes straight from the Git tree
open(dest, "w").write(content)

os.path.join() no neutraliza las secuencias ... Una entrada de tree cuyo nombre sea una ruta de traversal (p. ej. ../../../../../root/.ssh/authorized_keys) hace por tanto que el proceso privilegiado escriba fuera del directorio previsto.


¿Por qué objetos Git falsificados?

Git almacena el contenido y los nombres por separado:

  • un blob contiene el contenido en bruto de un archivo (sin nombre);
  • un tree asigna nombre → objeto (aquí es donde vive el nombre del archivo);
  • un commit apunta a un tree de nivel superior.

El nombre de archivo en una entrada de tree es solo texto, por lo que puede ser .. — pero el cliente Git estándar se niega a crear tal entrada, precisamente para prevenir este ataque.

Este PoC elude esa comprobación del lado del cliente escribiendo objetos Git en bruto directamente en .git/objects/ (calculando los ids SHA-1 a mano) y creando refs/heads/main manualmente. El repositorio enviado contiene entonces una entrada de tree llamada .., que el proceso de sincronización de root resuelve y sigue.


Cadena de ataque (contexto completo de la máquina)

  1. Punto de entrada — carga de archivos sin restricciones en Krayin CRM (CVE-2026-38526) → RCE como www-data.
  2. Movimiento lateral — credenciales en texto plano en el .env de producción, reutilizadas como contraseña del sistema → SSH como usuario con bajos privilegios.
  3. Escalada de privilegios — este PoC → root.

El tema recurrente en las tres etapas: un proceso privilegiado que confía en datos controlados por el atacante sin validación (un tipo MIME falsificado, una contraseña reutilizada, un nombre de archivo no saneado).


Requisitos

  • Ejecutar en el host objetivo, como el usuario autenticado con bajos privilegios.
  • Gitea accesible en http://localhost:3000.
  • git, python3, curl y ssh disponibles (por defecto en la máquina).

Uso

root@kitploit:~
chmod +x nexus_privesc.sh
./nexus_privesc.sh -t <TARGET_IP> -u <GITEA_USER> -p <GITEA_PASS> [-d DEPTH]

Ejemplo:

root@kitploit:~
./nexus_privesc.sh -t 10.129.21.192 -u jones -p 'REDACTED' -d 5

Qué hace el script

  1. Genera un par de claves SSH ed25519 (/tmp/.exploit_key).
  2. Solicita un token de la API de Gitea mediante autenticación básica.
  3. Crea un repositorio y lo marca como plantilla.
  4. Falsifica objetos Git en bruto codificando un tree de traversal .. que apunta a /root/.ssh/authorized_keys, con la clave pública del atacante como contenido.
  5. Envía el repositorio envenenado.
  6. Espera al temporizador de sincronización propiedad de root (~60s).
  7. Inicia sesión como root con la clave implantada.

Monitoriza la sincronización en el objetivo con:

root@kitploit:~
tail -f /var/log/template-sync.log

Una ejecución exitosa registra una línea como:

root@kitploit:~
synced: ../../../../../root/.ssh/authorized_keys

Ajuste de DEPTH

DEPTH es el número de niveles .. necesarios para subir desde el directorio de sincronización/staging hasta la raíz del sistema de archivos (/). Si la sincronización tiene éxito en el log pero el SSH como root falla, el traversal aterrizó en el nivel equivocado — reintenta con -d 4 o -d 6. El valor exacto puede confirmarse leyendo la ruta de staging en /etc/gitea/template-sync.py.


Remediación

  • Nunca construyas rutas del sistema de archivos a partir de nombres no confiables solo con os.path.join(). Normaliza y confina las rutas, p. ej.:

    root@kitploit:~
    base = os.path.realpath(base_dir)
    dest = os.path.realpath(os.path.join(base, name))
    if not dest.startswith(base + os.sep):
        raise ValueError("path traversal blocked")
    
  • Rechaza nombres de entradas de tree que contengan .., rutas absolutas o separadores de ruta.

  • Ejecuta el servicio de sincronización bajo una cuenta dedicada con bajos privilegios, no root.

  • Habilita receive.fsckObjects = true en Gitea para rechazar objetos enviados malformados.


Referencias

  • CWE-22 — Improper Limitation of a Pathname to a Restricted Directory (Path Traversal)
  • CVE-2026-38526 — carga de archivos sin restricciones en Krayin CRM (etapa de punto de entrada)
  • Git internals — objects (blob / tree / commit): https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
  • MITRE ATT&CK — T1068 Exploitation for Privilege Escalation

Autor

<your name / handle> — para uso educativo en HackTheBox.

Descargar herramienta
ClasePath Traversal (CWE-22) → Escalada de Privilegios Locales
Componentegitea-template-sync.service (personalizado /etc/gitea/template-sync.py)
Se ejecuta comoroot, activado cada ~60s por gitea-template-sync.timer
Causa raízos.path.join() sobre nombres no saneados tomados de objetos tree de Git
ImpactoUsuario autenticado con bajos privilegios → root
FlagDescripciónPor defecto
-tIP objetivo (para el SSH final como root)— (obligatorio)
-uNombre de usuario de Gitea— (obligatorio)
-pContraseña de Gitea— (obligatorio)
-dNúmero de niveles .. para llegar a / desde el directorio de sincronización5