Résumé
Gitea: Private org member list leaked via /members API endpoint — incomplete fix for PR #38145
Détails de l’avis
Summary
PR #38145 fixed ListPublicMembers and IsPublicMember but missed ListMembers. Any authenticated user can enumerate ALL members (not just public ones) of a private organization.
Affected Versions
<= v1.26.4 (latest) and main branch
Root Cause
routers/api/v1/org/member.go — ListMembers():
// Missing check: if !organization.HasOrgOrUserVisible(ctx, ctx.Org.Organization.AsUser(), ctx.Doer) { ctx.APIErrorNotFound() return }
Proof of Concept
Setup: privateorg (private), alice = member, bob = outsider
Bob lists ALL members of private org
curl -s "http://gitea/api/v1/orgs/privateorg/members"
-H "Authorization: token BOB_TOKEN"
Result: HTTP 200
[{"login":"alice","email":"alice@test.com",...}]
Expected: HTTP 404
Note
This is an incomplete fix variant of PR #38145. That PR fixed public_members endpoints only. ListMembers (/orgs/{org}/members) remains unpatched.
Fix
Add to ListMembers(): if !organization.HasOrgOrUserVisible(ctx, ctx.Org.Organization.AsUser(), ctx.Doer) { ctx.APIErrorNotFound() return }
Références
Vulnérabilités liées
Tout Supply chain →- HIGHCVE-2026-55485
piccolo-admin has a privilege escalation issue - admin to superuser via session-token disclosure in GET /api/tables/sessions/.
- MEDIUMGHSA-mf8r-wm2w-f8c5#phpmyfaq/phpmyfaq
phpMyFAQ public FAQ APIs expose inactive FAQ content
- MEDIUMGHSA-mf8r-wm2w-f8c5#thorsten/phpmyfaq
phpMyFAQ public FAQ APIs expose inactive FAQ content
- MEDIUMCVE-2026-71433
LangGraph: Namespace prefix matching crosses segment boundaries in Postgres and SQLite stores
- MEDIUMCVE-2026-57897
Gitea: Cross-Repo Information Disclosure via Org-Level Actions Run/Job APIs
- MEDIUMCVE-2026-58417
Gitea: REST API exposes organization membership of private organizations to public