
Demonstra um oráculo de enumeração de contas do Gitea: PUT /api/v1/user/following/{username} autenticado retorna 204 para contas ocultas e 404 para nomes desconhecidos, com um laboratório em loopback.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · gitea-follow-existence
Write-up: https://abraxaslabs.tech/research/gitea-follow-existence
Gitea 1.27.3 - Gitea
GetInfo já retorna 404 para usuários ocultos e mente sobre o motivo: fake ErrUserNotExist error message to not leak information about existence. PUT /user/following/{username} carrega o alvo com UserAssignmentAPI() e chama Follow. Sem IsUserVisibleToViewer. Nome inexistente: 404 user redirect does not exist. Nome oculto que existe: 204.
204 significa que a conta existe. 404 significa que você adivinhou um nome que não está lá. O JSON do perfil permanece fechado.
| ID | ainda sem CVE |
| CWE | CWE-203 |
| CVSS | Médio: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N |
| Produto | Gitea |
| Afetado | até v1.27.3 (146cc3e) |
| Autenticação | conta autenticada |
| Licença | GNU Affero GPL v3.0 |
| Laboratório | apenas 127.0.0.1 |
Autenticar-se (o registro aberto padrão é barato). Provar que uma conta oculta ou limitada existe mesmo quando a API de perfil retorna 404. Sem despejo de perfil. Sem git privado. Combinado com stargazers não autenticados, você pode encontrar um login oculto em um repositório público e então confirmar que ele ainda existe depois que ocultarem o perfil.
Check e Unfollow ficam no mesmo grupo. Mesma verificação ausente.
Mesma passagem de visibilidade que o stargazers. Quando um handler se esforça tanto para mentir, você olha para todas as outras rotas que recebem {username}. Follow não faz isso.
Registrei um atacante restrito, segui o nome oculto, segui um nome que não existe e comparei os códigos de status. Usuários públicos deveriam retornar 204. Isso não é SUCCESS. Oculto 204 vs desconhecido 404 enquanto GET é 404 é SUCCESS.
Caminhos errados já registrados: Follow oculto retornando 404 (então a visibilidade está nesta rota); JSON de perfil para o usuário oculto (GetInfo já retorna 404 - este bug é de classe de status, não de despejo); tratar Follow 204 em um usuário público como SUCCESS; um reverse shell. Teatro.
cd lab
./run.sh
Direcione apenas para http://127.0.0.1:18134. O Compose permite visibilidade 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
Chame IsUserVisibleToViewer em Follow (e Check/Unfollow) antes de FollowUser. Nomes ocultos devem retornar 404 da mesma forma que GetInfo já faz.
follower.go · grupo api.go following · GetInfoGNU Affero GPL v3.0. Consulte LICENSE. Apenas laboratório em loopback. Sem garantias.