
Demuestra un oráculo de enumeración de cuentas de Gitea: la petición autenticada PUT /api/v1/user/following/{username} devuelve 204 para cuentas ocultas y 404 para nombres desconocidos, con un laboratorio de loopback.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · gitea-follow-existence
Análisis: https://abraxaslabs.tech/research/gitea-follow-existence
Gitea 1.27.3 - Gitea
GetInfo ya devuelve 404 para usuarios ocultos y miente sobre el motivo: fake ErrUserNotExist error message to not leak information about existence. PUT /user/following/{username} carga el objetivo con UserAssignmentAPI() y llama a Follow. Sin IsUserVisibleToViewer. Nombre inexistente: 404 user redirect does not exist. Nombre oculto que existe: 204.
204 significa que la cuenta existe. 404 significa que has adivinado un nombre que no está ahí. El JSON del perfil permanece cerrado.
| ID | aún sin CVE |
| CWE | CWE-203 |
| CVSS | Medio: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N |
| Producto | Gitea |
| Afectados | hasta v1.27.3 (146cc3e) |
| Autenticación | cuenta con sesión iniciada |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1 |
Iniciar sesión (el registro abierto por defecto es barato). Demostrar que una cuenta oculta o limitada existe incluso cuando la API de perfil devuelve 404. Sin volcado de perfil. Sin git privado. Combinado con stargazers sin autenticación, puedes encontrar un login oculto en un repositorio público y luego confirmar que sigue existiendo después de que oculten el perfil.
Check y Unfollow están en el mismo grupo. Misma comprobación ausente.
El mismo repaso de visibilidad que en stargazers. Cuando un handler se esfuerza tanto en mentir, miras todas las demás rutas que aceptan {username}. Follow no lo hace.
Registré un atacante restringido, seguí el nombre oculto, seguí un nombre que no existe y comparé los códigos de estado. Se supone que los usuarios públicos devuelven 204. Eso no es SUCCESS. Oculto 204 frente a desconocido 404 mientras GET devuelve 404 es SUCCESS.
Pistas falsas ya registradas: Follow sobre un oculto devolviendo 404 (entonces la visibilidad sí está en esta ruta); el JSON del perfil para el usuario oculto (GetInfo ya devuelve 404 - este fallo es de clase de estado, no un volcado); tratar el 204 de Follow sobre un usuario público como SUCCESS; una reverse shell. Teatro.
cd lab
./run.sh
Dirígete solo a http://127.0.0.1:18134. Compose permite la visibilidad public,limited,private.
get-hidden status=404
follow-hidden status=204
follow-unknown status=404 user redirect does not exist
oracle hidden=204 unknown=404
SUCCESS GITEA-FOLLOW-ORACLE
Llamar a IsUserVisibleToViewer en Follow (y en Check/Unfollow) antes de FollowUser. Los nombres ocultos deben devolver 404 de la misma forma en que ya lo hace GetInfo.
follower.go · grupo following de api.go · GetInfoGNU Affero GPL v3.0. Véase LICENSE. Solo para laboratorio en loopback. Sin garantía.