- Status Closed
-
Assigned To
cbay - Private
Opened by zchill - 11.09.2026
Last edited by cbay - 11.09.2026
FS#477 - Anonymous user enumeration with full real names and complete staff privilege hierarchy via seq IDs
Asset: https://security.alwaysdata.com/?do=user&id=<user_id>
Class precedent: FS#426 (Internal staff account and privilege hierarchy disclosure, closed as accepted) - same data class, different and currently live path
Class: CWE-200 exposure of information / CWE-639 authorization bypass on user profiles
CVSS 3.1: AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N (5.3, Medium)
Observed: 11 September 2026, unauthenticated, reproduced across dozens of user IDs
Summary
The profile page of every tracker account is rendered to anonymous visitors, addressable both as ?do=user&id=<sequential> and /user/<sequential>, and it discloses each account's global permission group (Admin or Reporters) alongside the real name, activity counters and registration date. User IDs are sequential and the existing/missing distinction is visible in the response, so the entire user table can be enumerated in one pass.
Applied to your own team this yields the complete privilege hierarchy of the security program: every Admin account among the staff (seven of them across IDs 1-25) is distinguishable from every external reporter account by one request per ID. Your FS#426 established that you treat internal staff account and privilege hierarchy disclosure as a qualifying vulnerability on this asset when it leaked through system files; the same hierarchy is available today over plain HTTP through the profile renderer.
Two honest scope notes. First, usernames and, for users who interacted with tasks, even real names already appear on task pages in link title attributes (for example title="Matthias" on a task 38 comment link); what the profiles add is the group flag and the complete-population walk. Second, I did not download anything beyond the profile pages themselves; no login was attempted.
Reproduction
Plain curl, no cookies, no authentication.
Step 1. A staff profile renders with real name and privilege group.
$ curl -s "https://security.alwaysdata.com/?do=user&id=1"
Profile: Cyril (cbay) Real Name Cyril Global Group Admin Project Group None Tasks opened 0 Assigned To 330 Comments 438 Registered since 09.01.2024
Step 2. Sequential IDs enumerate the full population. Results for IDs 1-25 (unmodified page text):
id=1 Cyril (cbay) Global Group Admin id=2 Nicolas (nferrari) Global Group Admin id=3 Xavier (xlefloch) Global Group Admin id=4 Heloise (hdegorce) Global Group Admin id=5 Matthias (mdugue) Global Group Admin id=6 Brijesh (Redhet) Global Group Reporters id=8 Abdelrahman Ibrahim (Abdelrahman) Global Group Reporters id=9 prakash (grycolor) Global Group Reporters id=10 S.Lakshmi Vignesh (weshi) Global Group Reporters id=11 Devansh (Devansh811) Global Group Reporters id=12 basil (basil) Global Group Reporters id=13 Akhil C (Bad_Script3r) Global Group Reporters id=14 Aditya (Aditya2003) Global Group Reporters id=15 Neel Shukla (neelshukla0409) Global Group Reporters id=16 Mustafa Hassan (monty099) Global Group Reporters id=22 Francois Nonnenmacher (fnonnenmacher) Global Group Admin id=23 Tom Gabriele (tgabriele) Global Group Admin
(accents reproduced as-is in the live pages; IDs 7 and others in the range are inactive accounts that redirect to the homepage)
The walk was extended to ID 60 to complete the population: the Admin group totals eight accounts across IDs 1-29 (cbay, nferrari, xlefloch, hdegorce, mdugue, fnonnenmacher, tgabriele, ngeoffroy), and the Reporter cohort continues with three dozen real-named accounts. One account (id=35) stores a raw HTML/template-injection probe in its real_name field (<a href="//bf.am">click</a> ${{7*7}}, planted in April 2024); the profile page renders it fully escaped, which documents both that the field is attacker-controllable and that the escaping on this page holds.
Step 3. Username lookup works the same way:
$ curl -s "https://security.alwaysdata.com/?do=user&user_name=fnonnenmacher" Profile: Francois Nonnenmacher (fnonnenmacher) Real Name Francois Nonnenmacher Global Group Admin ...
What this discloses
1. The complete staff privilege hierarchy: which of your tracker accounts hold the Admin group. Seven Admin accounts across the enumerated range, including accounts whose group membership was not previously public knowledge.
2. The full user population with real names, one request per sequential ID: staff and every external researcher who ever registered, in ID order. Some real names also appear in title attributes on task pages, but the profile walk collects the whole population, including accounts that never touched a public task.
3. Activity profiles: how many tasks each account opened, was assigned, commented on, and when they registered. For staff accounts this maps involvement per report.
4. A user-table oracle: existing IDs render a profile, non-existent ones redirect to the homepage, so the exact boundary of the user table is measurable.
Why I consider this reportable and not the platform working as intended
FS#426 established that you treat internal staff account and privilege hierarchy disclosure as a qualifying vulnerability on this asset, and FS#440 extended it when the same data reached the public internet. That leak was fixed at the file level; the profile renderer discloses the same hierarchy - which accounts hold Admin - over HTTP today, together with a complete population walk. Whatever the intended audience of a profile page is, an anonymous ten-line loop producing the full admin roster of your security team is not it.
Suggested fix
1. Require authentication for profile pages, or restrict what an anonymous request renders: drop the Global Group field and real name for anonymous viewers at minimum.
2. Deployment-level option available immediately: the webserver vhost can deny /user/ and ?do=user for anonymous visitors in one rule - this is a hosting-configuration decision independent of the Flyspray application, which currently offers no built-in toggle for profile visibility.
3. Stop sequential-ID addressing for profiles (route by an unguessable per-user token) if profiles must stay public.
4. Review which group memberships should be visible at all; the Admin/Reporters split of your security team is the operationally valuable part of this disclosure.
Loading...
Available keyboard shortcuts
- Alt + ⇧ Shift + l Login Dialog / Logout
- Alt + ⇧ Shift + a Add new task
- Alt + ⇧ Shift + m My searches
- Alt + ⇧ Shift + t focus taskid search
Tasklist
- o open selected task
- j move cursor down
- k move cursor up
Task Details
- n Next task
- p Previous task
- Alt + ⇧ Shift + e ↵ Enter Edit this task
- Alt + ⇧ Shift + w watch task
- Alt + ⇧ Shift + y Close Task
Task Editing
- Alt + ⇧ Shift + s save task
Hello,
That would be an issue in Flyspray, I suggest you report it to them. It's out of our scope.
Kind regards,
Cyril