Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
forgejo-keys-idor — Forgejo 16.0.5 - Alta - Remota - IDOR - GET /api/v1/user/keys/{id} devuelve las claves SSH y de despliegue de otros usuarios | Kitploit
Herramientas/GitHubGitHub/abraxas/forgejo-keys-idor
Autenticación y AutorizaciónAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebRecopilación de InformaciónPruebas de PenetraciónSeguridad de APIsLabs y Práctica
GitHubabraxas/forgejo-keys-idor

forgejo-keys-idor

Forgejo 16.0.5 - Alta - Remota - IDOR - GET /api/v1/user/keys/{id} devuelve las claves SSH y de despliegue de otros usuarios

21hace 9 díasAún no revisado

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
Ver Repositorio

Abraxas Labs - forgejo-keys-idor

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  forgejo-keys-idor

Write-up: https://abraxaslabs.tech/research/forgejo-keys-idor

forgejo-keys-idor

Clase: IDOR Alcance: Remoto

Forgejo 16.0.5 (8d24b7d) - Forgejo

GET /api/v1/user/keys/{id} se encuentra en el grupo del usuario actual (reqToken, ámbito de usuario). El handler sigue cargando public_key por ID numérico sin comprobación de propietario. La misma tabla contiene claves de usuario, claves de despliegue y principales. GPG en esta versión lo hace bien: GetGPGKeyForUserByID(ctx, ctx.Doer().ID, id). Los campos privados adicionales están restringidos. El material de la clave pública, el título y la huella digital no lo están. Los IDs son secuenciales.

Un token read:user recorre 1, 2, 3 e inventaría las claves SSH y de despliegue de otras personas.

IDaún sin CVE
ClaseIDOR
AlcanceRemoto (autenticado read:user / sesión)
CWECWE-639
CVSSAlto: 7.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
ProductoForgejo
Afectadoshasta v16.0.5 (8d24b7d)
Autenticaciónautenticado (token read:user o sesión)
LicenciaGNU Affero GPL v3.0
Laboratoriosolo 127.0.0.1

Qué puede hacer un atacante

Registrar o usar cualquier cuenta, generar un token read:user (o usar una cookie de sesión), recorrer /api/v1/user/keys/{id}. Obtienen títulos, huellas digitales y material de clave pública de claves que no les pertenecen. No obtienen la clave privada. No obtienen una shell. Inventarían quién tiene acceso a qué.

PrivilegioMétodo / sinkReconocimiento / integridad / disponibilidadProbado en laboratorio o inferido
Leer el título, la huella digital y el material de la clave pública SSH de otro usuarioGET /api/v1/user/keys/{id} como propietario ajenoReconocimiento (confidencialidad del inventario de claves públicas)Probado en laboratorio. Título testigo FORGEJO-KEYS-IDOR-WITNESS en el id 1; la lista del atacante solo muestra el id 2
Inventariar claves de despliegue de la misma formaMismo handler, filas KeyTypeDeploy en public_key (OwnerID 0)ReconocimientoInferido de la tabla. El laboratorio plantó una clave SSH de usuario, no una clave de despliegue
Leer los principales de certificados SSHMismo handler, filas KeyTypePrincipal. ListPublicKeys excluye este tipoReconocimientoInferido de la tabla
Ver claves que pertenecen a usuarios limitados o privadosSin comprobación de visibilidad en esta consultaReconocimientoInferido del handler
JSON extra (user, key_type, read_only)appendPrivateInformation solo si es admin o propietarioReconocimientoProbado en laboratorio como cerrado: la respuesta de no propietario no tenía el campo user

Cerrado en esta ruta: material de clave privada, una shell, GET /users/{username}/keys (lista pública por nombre de usuario), GPG GET /api/v1/user/gpg_keys/{id} (404 en un id ajeno), DeletePublicKey (403 para propietario/admin). El cross-repo GET /repos/{owner}/{repo}/keys/{id} devuelve 404 cuando RepoID no coincide.

Los parches de seguridad de v16.0.5 (#14370) eran RCE por git-apply y CSRF de OpenID. No cerraron esta consulta. Misma clase que gitea-user-keys-idor, que sigue abierta aquí de forma independiente.

Cómo lo encontré

Fijé Forgejo v16.0.5 tras la oleada de 2026-09. Gitea 1.27.3 todavía tenía esta consulta. Forgejo ha divergido, así que releí el handler de claves del usuario actual junto a GPG en lugar de copiar el paquete de Gitea. GPG devuelve 404 en un id ajeno. SSH no.

Los giros incorrectos ya registrados: tratar la propia lista del atacante como la filtración (no lo es: la lista está acotada, el GET-por-id no lo está); tratar DISABLE_REGISTRATION=true en el instalador como un cierre (cualquier cuenta existente es suficiente); una reverse shell. Teatro.

Laboratorio

python3 forgejo-keys-idor-Abraxas-Labs.py

o:

cd lab
./run.sh

Dirígete solo a http://127.0.0.1:19310. Imagen codeberg.org/forgejo/forgejo:16.0.5. Dos cuentas. Testigo FORGEJO-KEYS-IDOR-WITNESS.

IOC planted victim-id=1 attacker-id=2
IOC attacker-list status=200 ... title=attacker-own-key
IOC get id=1 status=200 ... FORGEJO-KEYS-IDOR-WITNESS
IOC gpg-neg id=1 status=404
SUCCESS forgejo-keys-idor victim-id=1 get-http=200 list-has-id=no gpg-http=404 FORGEJO-KEYS-IDOR-WITNESS

La corrección

404 a menos que key.OwnerID == ctx.Doer().ID (o administrador del sitio). Rechazar KeyTypeDeploy / KeyTypePrincipal en esta ruta. Coincidir con GetGPGKeyForUserByID.

Referencias

  • codeberg.org/forgejo/forgejo etiqueta v16.0.5
  • GetPublicKey
  • Misma clase en Gitea: gitea-user-keys-idor
  • Cercano parcheado (no esta búsqueda): v16.0.5 security patches
  • CWE-639

Licencia

GNU Affero GPL v3.0. Ver LICENSE. Solo laboratorio de loopback. Sin garantía.

Descargar herramienta