Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain valid Gitea account (any privilege)
-
DeliveryIdentify private organization name via API or UI
-
ExploitSend authenticated GET /api/v1/orgs/{org}/members
-
ExecutionServer skips HasOrgOrUserVisible check
-
ImpactReceive full member list with emails
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK
2 techniques across 2 tactics: Collection, Discovery The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The attacker must possess a valid authentication token for any account on the Gitea instance - the API endpoint requires authentication, contradicting the published PR:N CVSS metric. The target organization must be configured as private (public organizations expose member lists by design, so there is no vulnerability in that context). No special roles, admin access, or organization membership is required beyond a basic authenticated account. Exploitation is limited to the /api/v1/orgs/{org}/members REST endpoint; the /members web UI route may have independent access controls. Instances where API access is network-restricted or where anonymous/public registration is disabled significantly reduce the attacker pool. |
| Impact | The NVD-assigned CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N) carries a 7.5 score but contains a material error: PR:N implies unauthenticated exploitation, yet the CVE description, advisory, and PoC all explicitly require a valid authentication token ('Authorization: token BOB_TOKEN'). The correct privilege level is PR:L, which yields a recalculated score of approximately 6.5 (Medium). This discrepancy means defenders relying on the published CVSS score alone will overestimate the attack surface. The EPSS score (0.16%, 5th percentile) corroborates limited real-world exploitation activity. No CISA KEV listing exists. A working PoC is published in the GitHub advisory, lowering the barrier to exploitation but the requirement for a valid Gitea account meaningfully constrains the attacker pool to registered or compromised users on the target instance. The confidentiality impact is genuine - private org membership and email addresses are exposed - but integrity and availability are unaffected. Real-world priority is moderate: organizations operating private Gitea instances with sensitive membership data (e.g., internal security teams, corporate R&D orgs) should treat this as urgent; public Gitea instances with openly-visible organizations face negligible additional risk. |
| Exploit ScenarioDerived | An attacker with any valid Gitea account on the target instance - including a low-privilege account created for a public repository - sends a single authenticated GET request to /api/v1/orgs/targetorg/members with their token. The server returns HTTP 200 with a JSON array of all private organization members including usernames and email addresses, bypassing the intended HTTP 404 response for non-members. A publicly available PoC curl command is included in the GitHub Security Advisory, requiring no additional tooling. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv2 – Aug 14, 2026
Private organization member enumeration in Gitea allows any authenticated user to retrieve the full member roster - including emails - of a private organization via the /api/v1/orgs/{org}/members endpoint. The root cause is an incomplete fix: PR #38145 added visibility guards to ListPublicMembers and IsPublicMember but omitted the same guard from ListMembers, leaving a single missing HasOrgOrUserVisible check in routers/api/v1/org/member.go. Proof-of-concept code is publicly available in the GitHub Security Advisory; no active exploitation has been confirmed in CISA KEV, and the EPSS score of 0.16% (5th percentile) indicates low probability of widespread automated exploitation.
Earlier versions of this analysis (1)
Private organization member enumeration in Gitea allows any authenticated user to retrieve the full member list - including emails - of a private organization via the /api/v1/orgs/{org}/members endpoint. All Gitea instances running v1.26.4 or earlier are affected; the flaw stems from an incomplete fix (PR #38145) that corrected ListPublicMembers and IsPublicMember but left ListMembers without the HasOrgOrUserVisible visibility gate. Publicly available exploit code exists in the form of a documented proof-of-concept curl command in the GHSA advisory. No KEV listing; exploitation is opportunistic rather than targeted given the low barrier to entry for any credentialed user.
RemediationAI
Upgrade to Gitea v1.27.0 or later, which applies the missing HasOrgOrUserVisible() guard to ListMembers() in routers/api/v1/org/member.go. The patch is confirmed in the GitHub Security Advisory GHSA-prr9-9mp4-5gp2 (https://github.com/go-gitea/gitea/security/advisories/GHSA-prr9-9mp4-5gp2) and the official release blog at https://blog.gitea.com/gitea-1.27.0-is-released/. If an immediate upgrade is not possible, a compensating control is to restrict API access to the /api/v1/orgs/*/members endpoint via a reverse proxy (e.g., block or require additional authentication on that path pattern in nginx/Caddy); note this may break legitimate tooling that calls the members API. Auditing Gitea access logs for unexpected calls to /api/v1/orgs/{org}/members from accounts not belonging to those organizations can help detect exploitation attempts retroactively.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Gitea is a self-hosted, open-source Git service written in Go (pkg:go/gitea.dev). The affected code path is the ListMembers() handler in routers/api/v1/org/member.go, which services GET /api/v1/orgs/{org}/members. The root cause is CWE-200 (Exposure of Sensitive Information to Unauthorized Actor): the handler processes the request without first calling organization.HasOrgOrUserVisible() to verify that the requesting user has permission to see the organization's full membership. A parallel fix for the public_members endpoints was applied in PR #38145, confirming the intended access-control pattern exists and is functional - it was simply never ported to the ListMembers route. The leaked response body includes member logins and email addresses per the PoC output.
Know when Gitea gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Authentication is explicitly required per the description and PoC, so PR:L not PR:N; only confidentiality is impacted via member list disclosure.
Primary rating from Vendor (https://github.com/go-gitea/gitea).
CVSS VectorVendor: https://github.com/go-gitea/gitea
Lifecycle Timeline
2DescriptionCVE.org
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 }
Executive ViewAI
A missing authorization check in Gitea allows any authenticated user to enumerate the complete roster and email addresses of private organizations. With proof-of-concept code now publicly available, this threatens all self-hosted Gitea instances and creates immediate risk for credential harvesting and targeted phishing campaigns. Leadership should prioritize immediate patching to prevent internal directory exposure.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Remote code execution in Gitea (self-hosted Git service) via a code-injection flaw (CWE-94) allows attackers to run arbi
Broken access control in Gitea's Composer package registry (versions up to and including 1.26.1) lets remote attackers r
Gitea before 1.16.7 does not escape git fetch remote. Rated high severity (CVSS 7.5), this vulnerability is remotely exp
The git hook feature in Gitea 1.1.0 through 1.12.5 might allow for authenticated remote code execution in customer envir
Improper Neutralization of Input During Web Page Generation (XSS or 'Cross-site Scripting') vulnerability in Gitea Gitea
Authenticated command injection in Dokploy (self-hostable PaaS) versions 0.29.3 through 0.29.12 lets a low-privileged us
Reverse-proxy authentication bypass in the official Gitea Docker image (versions up to and including 1.26.2) allows any
Path traversal in Gitea's Org-mode (`.org`) markup renderer allows an attacker who can get Org-mode content rendered by
Container escape in Gitea act_runner (Docker backend, through act 0.262.0) lets an authenticated user with workflow-exec
models/repo_mirror.go in Gitea before 1.7.6 and 1.8.x before 1.8-RC3 mishandles mirror repo URL settings, leading to rem
Server-side request forgery and internal repository exfiltration in Gitea before 1.27.0 lets a low-privileged authentica
Authorization bypass in Gitea versions 1.22.3 through 1.26.1 allows holders of `public-only` access tokens or OAuth gran
Same weakness CWE-200 – Information Exposure
View allSame technique Information Disclosure
View allVendor StatusVendor
SUSE
| Product | Status |
|---|---|
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
EUVD-2026-58155
GHSA-prr9-9mp4-5gp2
NVD
CVE.org
EPSS
Exploit-DB