Vulnerabilidad crítica en Gitea permite ejecución remota de código

Publicado el

Vulnerabilidad en Gitea

Gitea, la plataforma de Git autohospedada, ha solucionado una vulnerabilidad crítica de ejecución remota de código (RCE) que afecta a las versiones 1.17 y posteriores, hasta la 1.27.1. Esta falla permite a un usuario con acceso de escritura en un repositorio transformar contenido de parches controlados por un atacante en un hook de Git en vivo, lo que les permite ejecutar comandos de shell como si fueran la cuenta de servicio de Gitea. La vulnerabilidad ha sido registrada como CVE-2026-60004 y posee un CVSS de 9.8.

Detalles de la Vulnerabilidad

El problema radica en una llamada a la API que requiere autenticación y permisos de escritura en el repositorio. Sin embargo, Gitea permite el registro por defecto, lo que significa que un visitante externo puede crear una cuenta normal y un repositorio en una instalación sin cambios, luego explotar el error sin necesidad de credenciales previas. La recomendación es actualizar a la versión 1.27.1, que corrige la vulnerabilidad.

El 27 de julio, Gitea anunció que las instancias de Gitea Cloud se actualizarían automáticamente. En su aviso del 28 de julio, Gitea no indicó que la vulnerabilidad hubiera sido explotada en el entorno real, aunque incluyó un código público de prueba de concepto (PoC).

Desactivar el registro abierto puede eliminar el camino de creación de cuentas públicas mientras se despliega la actualización, pero no soluciona la falla ni protege contra usuarios existentes con acceso de escritura en los repositorios.

Mecanismo de Explotación

La vulnerabilidad fue reportada por el investigador de seguridad Shai Rod, conocido como NightRang3r, quien fue acreditado por Gitea en su aviso. La ruta afectada invoca `reqToken()`, que rechaza solicitudes sin un usuario autenticado. La falta de requisitos previos para credenciales proviene de la configuración predeterminada del proyecto, que permite el registro abierto sin necesidad de un correo electrónico o aprobación manual, no restringe a los nuevos usuarios y no impone límites de creación de repositorios.

El error se encuentra en el endpoint `POST /api/v1/repos/{owner}/{repo}/diffpatch`. Según el aviso de seguridad de Gitea, este endpoint aplica un parche suministrado dentro de un clon temporal bare compartido. Las versiones vulnerables invocan `git apply` con varias opciones, incluyendo `--index`, `--recount`, `--cached`, y `--binary`, añadiendo la opción de retroceso de tres vías cuando el servidor utiliza Git 2.32 o posterior. Un atacante presenta el mismo parche dos veces para provocar una colisión `add/add`, y el retroceso de tres vías verifica el camino indexado a pesar de que la operación utiliza `--cached`.

Dado que el clon temporal es bare, su raíz es `$GIT_DIR`. Un archivo ejecutable colocado en `hooks/post-index-change` se almacena en el directorio de hooks de Git y se activa durante la actualización del índice. La PoC inicia sesión con una cuenta normal, crea un repositorio privado inicializado, envía el parche malicioso dos veces y recupera la salida del comando, sin necesidad de un callback saliente.

Consecuencias de la Explotación

La explotación exitosa concede al atacante los privilegios de la cuenta del sistema operativo de Gitea. Dependiendo de cómo se aísle la instancia, esto podría exponer secretos de aplicaciones y entornos, credenciales y contenidos de bases de datos, credenciales de OAuth y servicios internos accesibles. La explotación aún requiere acceso de escritura en el repositorio, Git 2.32 o posterior, tener habilitada la ruta de `diffpatch`, y un sistema de archivos temporal que sea writable y executable.

El registro por defecto permite a un extraño obtener el acceso de escritura requerido en una instalación sin cambios. Es fácil pasar por alto la corrección en el registro de cambios, ya que Gitea cambió el clon temporal de bare a no bare. El comentario en el código advierte explícitamente que los comandos de Git que utilizan `--index` pueden operar en el árbol de trabajo. Este cambio se fusionó y se retroportó el 26 de julio de 2026, y la versión 1.27.1 se lanzó el 27 de julio, seguida del aviso de seguridad el 28 de julio.

Los registros de la versión mencionaron el cambio bajo MISC como "refactor: git patch apply", no bajo SEGURIDAD. Rod había anticipado la RCE junto con un problema separado de inclusión de archivos, con una PoC recuperando `/etc/passwd` de un host Gitea 1.27.0. Este problema parece corresponder a un cambio separado incluido en 1.27.1 que alteró el renderizador de Org-mode de Gitea para que las rutas `#+INCLUDE` se devuelvan como texto plano en lugar de leerse del sistema de archivos del servidor. Gitea no ha publicado un aviso separado o CVE para el problema de inclusión de archivos.

Fuente

Ver noticia original