Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Network-accessible API requiring authenticated team membership (PR:L); metadata-only disclosure drives C:L with no integrity or availability impact.
Primary rating from Vendor (https://github.com/go-gitea/gitea).
CVSS VectorVendor: https://github.com/go-gitea/gitea
Lifecycle Timeline
2DescriptionCVE.org
Summary
Gitea's /api/v1/teams/{id} API routes do not correctly enforce the public-only access token restriction.
A public-only token is intended to limit API access to public repositories and public organizations. However, several team API routes continue to return private team repository metadata and private team activity feed entries when called with a public-only token.
Details
The /api/v1/teams/{teamid} route group uses:
orgAssignment(false, true)This loads ctx.Org.Team, but does not load ctx.Org.Organization.
The checkTokenPublicOnly middleware checks organization visibility through ctx.Org.Organization. When ctx.Org.Organization is nil, the organization visibility check silently passes.
In addition, the team repository handlers return repositories without applying repository-level public-only filtering:
repo_model.GetTeamRepositories(...)
convert.ToRepo(...)They do not call:
ctx.TokenCanAccessRepo(repo)The team activity feed handler also sets:
IncludePrivate: truebut does not apply:
opts.ApplyPublicOnly(ctx.PublicOnly)PoC
Vulnerability is verified on latest gitea release (1.26.2) and nightly build. Frist, create a public-only organization-scoped token for a user who is a member of a team in a private org with private repositories:
<img width="1075" height="577" alt="image" src="https://github.com/user-attachments/assets/4a01d0ab-f67c-47c9-94b1-e74ddd77d7bc" />
<img width="649" height="375" alt="image" src="https://github.com/user-attachments/assets/b5d91962-088e-40f4-bc51-88a17946e6d8" />
Use the returned token to request team repositories:
<img width="1728" height="190" alt="image" src="https://github.com/user-attachments/assets/0f15878f-5806-431d-958c-ffb39bf7c1e9" />
Expected result: Private repositories should be hidden or rejected for a public-only token. Actual result: Private team repository metadata is returned.
The team activity feed endpoint can be tested similarly:
<img width="1728" height="237" alt="image" src="https://github.com/user-attachments/assets/280a5ddf-ad14-4769-86a8-1fdad858287c" />
Impact
A public-only token can access private team resources that should be hidden from that token.
AnalysisAI
Incorrect authorization enforcement in Gitea's team API routes exposes private repository metadata and activity feed entries to public-only access tokens. Affected versions through 1.26.2 allow an authenticated team member holding a public-only scoped token to bypass the intended access restriction and retrieve private team repository listings and private activity feed data via /api/v1/teams/{id} endpoints. Publicly available exploit code (PoC) has been verified against Gitea 1.26.2 and nightly builds; no KEV listing at time of analysis. EPSS data not provided, but the CVSS score of 4.3 and limited confidentiality impact (metadata only, no code exfiltration) suggest moderate real-world risk.
Technical ContextAI
Gitea is a self-hosted Git service written in Go. The affected component is the team API route group at /api/v1/teams/{teamid}, which uses orgAssignment(false, true) - this loads ctx.Org.Team but intentionally does not load ctx.Org.Organization. The checkTokenPublicOnly middleware enforces the public-only token restriction by checking organization visibility through ctx.Org.Organization; when that value is nil (as it is for team routes), the visibility check silently passes - a classic nil-dereference bypass pattern. Additionally, team repository handlers invoke repo_model.GetTeamRepositories() and convert.ToRepo() without calling ctx.TokenCanAccessRepo(repo), bypassing per-repository public-only filtering. The team activity feed handler explicitly sets IncludePrivate: true without applying opts.ApplyPublicOnly(ctx.PublicOnly). The root cause class is CWE-863 (Incorrect Authorization) - the authorization logic is present but fails to execute due to missing context initialization on the team route group. Affected package: pkg:go/gitea.dev versions prior to 1.27.0.
RemediationAI
Upgrade to Gitea v1.27.0 or later, which resolves the authorization bypass by correctly loading ctx.Org.Organization in team API routes and applying ctx.TokenCanAccessRepo(repo) filtering and opts.ApplyPublicOnly(ctx.PublicOnly) to team repository and activity feed handlers respectively. The release is available at https://github.com/go-gitea/gitea/releases/tag/v1.27.0. If immediate upgrade is not possible, a compensating control is to revoke all public-only organization-scoped tokens and restrict API token creation until the patch is applied - this removes the precondition for exploitation but also disrupts legitimate public-only API integrations. Alternatively, network-level ACLs can restrict /api/v1/teams/* endpoints to trusted internal IP ranges, though this may impact legitimate external integrations. The GitHub Security Advisory is at https://github.com/go-gitea/gitea/security/advisories/GHSA-h56g-4qw7-2mxg.
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
Reverse-proxy authentication bypass in the official Gitea Docker image (versions up to and including 1.26.2) allows any
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
An issue was discovered in Gitea through 1.11.5. Rated high severity (CVSS 7.5), this vulnerability is remotely exploita
Missing Authorization in GitHub repository go-gitea/gitea prior to 1.16.4. Rated high severity (CVSS 7.1), this vulnerab
Same weakness CWE-863 – Incorrect Authorization
View allSame technique Authentication Bypass
View allVendor StatusVendor
SUSE
Severity: Moderate| Product | Status |
|---|---|
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
Share
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-58158
GHSA-h56g-4qw7-2mxg