
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
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 adivinaste un nombre que no está ahí. El JSON del perfil permanece cerrado.
| ID | sin CVE todavía |
| 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 |
| Afectado | hasta v1.27.3 (146cc3e) |
| Auth | cuenta con sesión iniciada |
| Licencia | GNU Affero GPL v3.0 |
| Lab | 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 repo público y luego confirmar que todavía existe después de que oculten el perfil.
Check y Unfollow están en el mismo grupo. Misma comprobación ausente.
Misma pasada de visibilidad que 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 vs desconocido 404 mientras GET es 404 es SUCCESS.
Caminos equivocados ya registrados: Follow oculto devolviendo 404 (entonces la visibilidad está en esta ruta); JSON de perfil para el usuario oculto (GetInfo ya devuelve 404 - este bug es de clase de estado, no un volcado); tratar Follow 204 en un usuario público como SUCCESS; una reverse shell. Teatro.
cd lab
./run.sh
Objetivo solo http://127.0.0.1:18134. Compose permite 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 Check/Unfollow) antes de FollowUser. Los nombres ocultos deben devolver 404 de la misma forma que GetInfo ya lo hace.
follower.go · api.go grupo following · GetInfoGNU Affero GPL v3.0. Ver LICENSE. Solo lab en loopback. Sin garantía.