
🫖 Herramienta de descubrimiento correlacionado con contratos y validación autorizada para Gitea CVE-2026-60004
Una herramienta independiente de descubrimiento, evaluación y validación correlacionada con contrato para la vulnerabilidad de ejecución remota de código en el Git-hook
diffpatchde Gitea.
scanner.py ofrece a pentesters, defensores e investigadores de seguridad una única herramienta sin dependencias para:
Este proyecto se proporciona únicamente para pruebas de seguridad autorizadas, validación defensiva, investigación y educación. Ejecute los modos activos exclusivamente contra sistemas que posea o para los que tenga permiso escrito explícito de evaluación. Usted es responsable de cumplir con todas las leyes, contratos, reglas de compromiso y requisitos de divulgación aplicables.
Los autores y colaboradores no son responsables por uso indebido, daños, interrupción del servicio, pérdida de datos o consecuencias legales. El PoC activo ejecuta un comando como el usuario del sistema operativo de Gitea y cambia el estado del servidor al crear un repositorio privado. Trátelo como cualquier otra herramienta de validación de RCE.
CVE-2026-60004 afecta el flujo de trabajo diffpatch de repositorios de Gitea. Un escritor de repositorio puede enviar contenido de parche controlado que instala un Git hook en un clon temporal compartido y desnudo. Aplicar el parche manipulado dos veces desencadena una colisión add/add y provoca que el hook se ejecute como la cuenta de servicio de Gitea.
Forgejo y otros forks no se clasifican automáticamente como vulnerables. Su implementación debe revisarse de forma independiente.
Los modos activos no aceptan listas de objetivos ni comodines.
PATHdiscoverEl escáner usa únicamente la biblioteca estándar de Python. No se requiere pip install.
git clone https://github.com/InfoSec-DB/CVE-2026-60004-Gitea-Validator.git
cd CVE-2026-60004-Gitea-Validator
python3 scanner.py --help
python3 scanner.py verify \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/version.json
python3 scanner.py recon \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/recon.json
La detección de versión es una señal de evaluación, no una prueba de explotabilidad. Los parches retroportados, las compilaciones personalizadas, los proxies inversos y los forks pueden requerir revisión manual.
Mantenga la contraseña fuera del historial del shell colocándola en el entorno para el comando:
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
A menos que se proporcione --yes-i-am-authorized para automatización, confirm le pide escribir la frase de confirmación vinculada al contrato. El comando remoto predeterminado es id.
Use esto únicamente cuando la creación de cuentas esté permitida por las reglas de compromiso:
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--register-test-account \
--credential-log evidence/credentials.txt \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
La contraseña se almacena solo en el registro de credenciales privado, no se duplica en la evidencia JSON ni en el panel de resultados del terminal.
python3 scanner.py test \
https://gitea.example \
--contract-number ENG-2026-001
🚨 test es un comando de conveniencia activo. En un objetivo afectado con registro habilitado, crea automáticamente una cuenta y un repositorio privado, escribe el marcador del contrato, ejecuta id y guarda los resultados en afterdark-results/. Intencionalmente no tiene aviso interactivo adicional, por lo que invocarlo es el reconocimiento de autorización.
Para validación de alcance limitado y explícitamente aprobada, confirm y test aceptan --cmd. Prefiera el perfil predeterminado id siempre que sea suficiente.
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--cmd 'uname -a' \
--output evidence/confirmation.json
export LEAKIX_API_KEY='replace-with-your-key'
python3 scanner.py discover \
--method app \
--pages 3 \
--output evidence/leakix.json
Para inspeccionar registros de LeakIX de un host conocido sin contactar a ese host:
python3 scanner.py discover \
--method host \
--target gitea.example \
--pages 1 \
--output evidence/leakix-host.json
Los resultados del descubrimiento son pistas, no autorización para escanear o explotar los sistemas listados.
hooks/post-index-change.diffpatch del repositorio.0600 y se niega a sobrescribir evidencia existente.Las redirecciones HTTP autenticadas están restringidas al origen del objetivo seleccionado. La recuperación de salida de Git también deshabilita redirecciones mientras el encabezado de autorización está activo.
Las ejecuciones activas pueden producir:
confirmation.json — marcas de tiempo, objetivo, nombre de cuenta, evaluación de versión, código de retorno y salida capturadaconfirmation.command-output.txt — salida completa del comando remotocredentials.txt — contraseña generada de cuenta desechable, cuando se solicitaembedded-result.txt conservado dentro de la evidencia JSONEstos archivos pueden contener datos sensibles del compromiso. Están ignorados por el .gitignore incluido, se crean con modo 0600 y deben cifrarse en reposo según su política de manejo de evidencia.
La herramienta evita deliberadamente la eliminación automática para que la evidencia permanezca disponible para revisión. Después de las pruebas, un administrador del objetivo debe:
audit-* generada, si se creó unaafterdark-* generado/tmp/gitea-validation-*/client.txt1.27.1 o posteriorLa ejecución exitosa del PoC demuestra ejecución de comandos como la cuenta de servicio de Gitea. No prueba por sí misma acceso root, persistencia, movimiento lateral o compromiso del host subyacente.
id o whoami--execute-poc para confirmLas pruebas incluidas son locales y no realizan solicitudes de red:
python3 -m unittest discover -s tests -v
Las mejoras responsables son bienvenidas, especialmente correcciones de compatibilidad, reducción de falsos positivos, mejoras en la calidad de la evidencia y flujos de limpieza más seguros. Por favor, no envíe detalles de objetivos reales, credenciales, evidencia privada ni cargas útiles armamentizadas.
Para un problema de seguridad en esta herramienta en sí, siga SECURITY.md.
Hecho para investigadores cuidadosos que creen que un buen PoC debe ser reproducible, atribuible y aburrido de limpiar. 🛡️
| Elemento | Detalle |
|---|
| Producto | Gitea |
| Versiones afectadas | >= 1.17.0, < 1.27.1 |
| Versión parcheada | 1.27.1 |
| Impacto | Ejecución remota de comandos como el usuario del SO de Gitea |
| Acceso requerido | Acceso de escritura al repositorio; el registro abierto puede permitir a un atacante crearlo |
| Aviso | GHSA-rcr6-4jqh-j84m |
| Modo | Comportamiento de red | ¿Cambia el estado del objetivo? | Propósito |
|---|
discover | Consulta solo LeakIX | No | Busca en un índice de terceros existente; no contacta a los hosts descubiertos |
recon | Un objetivo exacto | No | Inventaría rutas públicas fijas y el documento Swagger publicado por el objetivo |
verify | Un objetivo exacto | No | Lee /api/v1/version y clasifica la versión de Gitea reportada |
test | Un objetivo exacto | Sí | Flujo de conveniencia: compuerta de versión, verificación de registro, cuenta desechable, marcador, id y evidencia |
confirm | Un objetivo exacto | Sí | Confirmación controlada con una cuenta aprobada o registro desechable explícito |