
Demonstriert ein Gitea-Konto-Enumeration-Orakel: Authentifiziertes PUT /api/v1/user/following/{username} gibt 204 für versteckte Konten und 404 für unbekannte Namen zurück, mit einem Loopback-Lab.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · gitea-follow-existence
Gitea 1.27.3 - Gitea
GetInfo liefert für versteckte Benutzer bereits 404 und lügt über den Grund: fake ErrUserNotExist error message to not leak information about existence. PUT /user/following/{username} lädt das Ziel mit UserAssignmentAPI() und ruft Follow auf. Kein IsUserVisibleToViewer. Fehlender Name: 404 user redirect does not exist. Versteckter Name, der existiert: 204.
204 bedeutet, dass das Konto existiert. 404 bedeutet, dass du einen Namen geraten hast, der nicht vorhanden ist. Das Profil-JSON bleibt verschlossen.
| ID | noch keine CVE |
| CWE | CWE-203 |
| CVSS | Medium: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N |
| Produkt | Gitea |
| Betroffen | bis v1.27.3 (146cc3e) |
| Auth | angemeldetes Konto |
| Lizenz | GNU Affero GPL v3.0 |
| Lab | nur 127.0.0.1 |
Anmelden (die standardmäßig offene Registrierung ist günstig). Beweisen, dass ein verstecktes oder eingeschränktes Konto existiert, selbst wenn die Profil-API 404 liefert. Kein Profil-Dump. Kein privates Git. In Kombination mit unauth stargazers kannst du einen versteckten Login in einem öffentlichen Repo finden und dann bestätigen, dass er noch existiert, nachdem das Profil versteckt wurde.
Check und Unfollow sitzen in derselben Gruppe. Dieselbe fehlende Prüfung.
Derselbe Visibility-Durchgang wie bei stargazers. Wenn ein Handler sich so viel Mühe gibt zu lügen, schaut man sich jede andere Route an, die {username} entgegennimmt. Follow tut das nicht.
Ich habe einen eingeschränkten Angreifer registriert, dem versteckten Namen gefolgt, einem Namen gefolgt, der nicht existiert, und die Statuscodes verglichen. Öffentliche Benutzer sollen 204 liefern. Das ist kein SUCCESS. Versteckt 204 vs. unbekannt 404, während GET 404 liefert, ist SUCCESS.
Bereits dokumentierte Irrwege: Follow auf versteckt liefert 404 (dann liegt die Visibility auf dieser Route); Profil-JSON für den versteckten Benutzer (GetInfo liefert bereits 404 - dieser Bug ist eine Statusklasse, kein Dump); Follow 204 bei einem öffentlichen Benutzer als SUCCESS behandeln; eine Reverse Shell. Theater.
cd lab
./run.sh
Ziel nur http://127.0.0.1:18134. Compose erlaubt die Sichtbarkeit 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
IsUserVisibleToViewer in Follow (und Check/Unfollow) vor FollowUser aufrufen. Versteckte Namen müssen genauso 404 liefern, wie GetInfo es bereits tut.
follower.go · api.go following group · GetInfoGNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.