Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessHold membership in org team
-
DeliveryOwner demotes team via API (permission field only)
-
ExploitPer-unit access not rebuilt or capped
-
ExecutionRetain stale write/read repo access
-
ImpactRead and push to repositories
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V8 - Authorization Least privilege on resource access
|
| Exploitation Conditions | Exploitation is triggered specifically when an organization owner changes a team's permission level through the Gitea REST API submitting only the |
| Impact | This is a genuine but conditional broken-access-control flaw (CWE-272, Incorrect Privilege Assignment) in Gitea rather than a mass-exploitable remote code execution issue. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N, 8.1 High) indicates network-reachable, low-complexity exploitation by an already-authenticated low-privilege actor with high confidentiality and integrity impact and no availability impact - consistent with a team member retaining write/read repository access they should have lost. The exploitation-enabling signals are weak: EPSS is only 0.16% (5th percentile), there is no CISA KEV listing, and no public exploit code is identified, so this is best treated as a lower-urgency patch-management item than the 8.1 score alone implies. A key nuance the CVSS score cannot capture is that the elevated access does not arise from an attacker action but from an administrator mistake: the flaw only manifests after an organization owner demotes a team via the API supplying only the |
| Exploit ScenarioDerived | An organization owner uses the Gitea API to demote a team (e.g., from admin to read) by sending only the |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 07, 2026
Gitea through 1.27.3 fails to revoke per-unit repository access when an organization team is demoted through the REST API, so existing team members silently keep their previous unit permissions - including write access to the team's repositories - after an owner lowers the team level (for example admin to read). The flaw is CWE-272 Incorrect Privilege Assignment: a PATCH that supplies only the permission field updates the team's access mode but never rebuilds its per-unit grants nor applies the new level as a cap, and exploitation requires an authenticated organization owner to make that API call plus a team that already holds per-unit repository permissions, with the CVSS vector (PR:L) confirming an authenticated beneficiary; the web form path is not affected. Vendor scoring is 8.1 with high confidentiality and integrity impact, while EPSS is only 0.16% (5th percentile) and no public exploit code has been identified at time of analysis; upgrading to Gitea 28.0.0 restores the intended cap behavior.
RemediationAI
Upgrade to Gitea 28.0.0, which is the vendor-released fix for this issue (see the GHSA-x8c3-3rp8-2j46 advisory, the release notes at https://github.com/go-gitea/gitea/releases/tag/v28.0.0, and PR https://github.com/go-gitea/gitea/pull/38938); because the patch changes unit-permission resolution rather than rewriting stored rows, administrators should also audit teams that were demoted via the API and, where needed, re-establish the correct unit set. Until upgrading, the most reliable compensating control is to change team permission levels only through the web form, which is confirmed unaffected, or to delete and recreate the affected team (or remove and re-add its unit grants) after any API-based demotion so stale team_unit rows cannot persist; note that recreating a team resets its unit configuration and may temporarily interrupt member access. Because the retained permissions can include write access to repositories, review recent commits, pushes, and pipeline activity on repositories owned by teams that were demoted through the API, and revoke or rotate any credentials, deploy keys, or tokens reachable through those repositories. Restricting the REST API to trusted administrators (network ACLs, reverse-proxy allowlists) reduces exposure but does not remediate the underlying broken-access-control behavior, and read-only monitoring via the organization team API can be used to detect teams whose effective unit access exceeds their reported permission level. No vendor-released patch exists for versions prior to 28.0.0, so remaining on 1.27.3 or earlier requires the workarounds above on an ongoing basis.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Gitea's authorization model is built from organizations, teams, and per-team 'units' (code, issues, pull requests, releases, wiki, etc.), each carrying an access mode of none, read, write, or admin; a team is also assigned an overall access mode, and repository visibility for a team is derived from a combination of team_repo associations and team_unit rows. Access decisions for a given user therefore take the maximum of the team-level mode and the matching unit-level mode, capped by the unit type's maximum permitted access. CVE-2026-103504 (CWE-272, Incorrect Privilege Assignment) arises because the API code path that changes a team's permission with only the permission field mutated the team's AccessMode but did not re-derive or rebuild the team_unit records, nor did it clamp the effective per-unit mode to the newly requested (lower) level. The result was a persisted privilege escalation for the team's existing members: after an admin-to-read demotion, the stale unit rows still granted write access to the team's repositories. The upstream fix in PR 38938 (shipped in v28.0.0, GHSA-x8c3-3rp8-2j46) reworks unit permission resolution: UnitAccessModeEx now computes the mode as max(unit access, team access) and then applies min(mode, unit type's MaxPerm()) as a hard cap, TeamList.UnitMaxAccess was renamed/reimplemented as AnyRepoUnitMaxAccess with an explicit FIXME noting it is still not per-repository precise, unit-name handling no longer special-cases admin teams, and repository query conditions were split into a reader-scoped helper (teamUnitsRepoReaderCond) that additionally honors the team's own authorize setting. The vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N describes a network-reachable, low-complexity issue requiring an authenticated actor and no user interaction, with high confidentiality and integrity impact but no availability impact - consistent with retained read/write repository access rather than service disruption.
Know when the next one hits your stack
- 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:L/UI:N/S:U/C:H/I:H/A:N
Authenticated team member (PR:L) reaches repos over the network API (AV:N) with no added complexity (AC:L); retained write/read gives C:H/I:H, no availability impact (A:N), scope unchanged.
Primary rating from Vendor (88ee5874-cf24-4952-aea0-31affedb7ff2).
CVSS VectorVendor: 88ee5874-cf24-4952-aea0-31affedb7ff2
Lifecycle Timeline
3DescriptionCVE.org
Changing an organization team's permission through the API with only the permission field did not rebuild the team's per-unit access, and the requested level was not applied as a cap. After an organization owner demoted a team, for example from admin to read, the team's members kept their previous unit permissions, including write access to the team's repositories. The web form was not affected.
Technical POC Analysis
CWE-272 (Incorrect Privilege Assignment / least-privilege violation) in Gitea's organization team edit path.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Gitea deployments at or below 1.27.3 can allow organization owners to demote a team through the REST API without actually reducing the team's existing repository write access, undermining access governance and least-privilege controls. This can leave proprietary code exposed to unauthorized modification or viewing by users who should have lost access, affecting any organization using Gitea teams with per-unit repository grants. Leadership should prioritize this because it creates a silent privilege persistence risk that can erode trust in code integrity and compliance controls.
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.
EUVD-2026-93914
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB