Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as Code-write collaborator
-
ExploitSend POST to /{owner}/{repo}/tags/delete for a release tag
-
ExecutionHandler omits plain-tag check
-
ImpactPermanently delete release and attachments
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V13 - Configuration Permission assignment review
|
| Exploitation Conditions | Requires an authenticated repository collaborator who holds write access to the Code unit but does not have Releases write access (the exact privilege-boundary this bug crosses); exploitation is a single POST to /{owner}/{repo}/tags/delete against the release's tag on an unpatched instance (Gitea ≤28.0.0). Key limiting factors: the attacker must already be a trusted collaborator with Code write on the target repository (not an anonymous outsider), and releases whose tags are covered by Protected Tag rules remain safe - those rules still blocked the deletion, so protected-tag configuration meaningfully mitigates real-world impact. |
| Impact | This is a broken-access-control / improper authorization flaw (CWE-732) in Gitea's tag-deletion web route, which shared a handler with release deletion and failed to verify the target was a plain tag. The provided CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H, base 8.1) indicates network-reachable, low-complexity exploitation by a low-privileged authenticated user, with high integrity and availability impact and no confidentiality impact. The real-world signals argue against treating this as a top-tier emergency: EPSS is only 0.17% (6th percentile), it is NOT on CISA KEV, no public exploit code is referenced (the only 'source code evidence' is the vendor fix PR, not a weaponized POC), and SSVC scores Exploitation=none, Automatable=no, Technical Impact=partial. These signals are internally consistent - a high-CVSS integrity/availability issue that is nonetheless not actively exploited and not trivially automatable at scale, because it requires an attacker to already be a trusted collaborator with Code write access on the specific repository. Note one conflict worth flagging: the input Tags label this 'Information Disclosure', but the CVSS vector sets C:N and the impact is data destruction (releases and attachments), so the disclosure framing is incorrect - this is an integrity/availability issue. Net: a legitimate insider-privilege-escalation bug that platform operators with multi-collaborator repositories should patch, but not a mass-exploitation 'drop everything' priority. |
| Exploit ScenarioDerived | A repository collaborator who has been granted write access to the Code unit but deliberately NOT given Releases write access sends a crafted POST to /{owner}/{repo}/tags/delete targeting the tag of a published release. Because the shared handler did not confirm the target was a plain tag, the release and all of its attachments are permanently deleted, bypassing the intended Releases-permission boundary. No public exploit code is identified at time of analysis; the request is simple enough to issue manually against any unpatched instance where the attacker holds Code write. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 07, 2026
Broken access control in Gitea up to and including 28.0.0 allows an authenticated repository collaborator who holds write access to the Code unit (but not Releases write access) to permanently delete published releases and their attachments by sending a single POST to /{owner}/{repo}/tags/delete against the release's tag. The flaw is rated CVSS 8.1 (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H per the assessed vector), reflecting high integrity and availability impact with no confidentiality loss, and exploitation requires the attacker to already be a trusted collaborator on the target repository rather than an anonymous outsider. There is no public exploit code identified at time of analysis, CISA KEV does not list it, SSVC rates exploitation as none and automatable as no, and EPSS is low at 0.17% (6th percentile).
RemediationAI
Apply the vendor-released patch: upgrade Gitea to 28.1.0 (https://github.com/go-gitea/gitea/releases/tag/v28.1.0; release notes at https://blog.gitea.com/release-of-28.1.0/), which introduces the missing 'isDelTag && !rel.IsTag' guard so the tag-deletion route rejects release targets with HTTP 409. Where upgrading is not immediately possible, configure Protected Tag rules that match the patterns of tags attached to releases - in the vulnerable code path these rules continued to block the deletion, making them an effective compensating control - but note the trade-off that protection must be configured per tag pattern and any release tag left unprotected remains deletable by a Code-write collaborator. Additionally, review repository collaborator permissions and remove or downgrade Code write access for any user who should not be able to mutate tags, since the flaw is only reachable by an authenticated collaborator with Code write (PR:L); this reduces the attack surface but constrains legitimate contributor workflows. Because SSVC rates this as non-automatable with no observed exploitation and EPSS is only 0.17%, prioritization can follow normal patching cadence for externally reachable instances, with faster action on instances that have many low-trust collaborators or unpushed release history.
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
This is a CWE-732 (Incorrect Permission Assignment for Critical Resource) flaw in Gitea's web routing and handler-sharing design. The web route for deleting tags (POST /{owner}/{repo}/tags/delete) enforces only write access to the repository's Code unit, yet it dispatches to the same handler used for release deletion (deleteReleaseOrTag in routers/web/repo/release.go). Because that shared handler did not verify that the requested target was actually a plain tag rather than a release, a user whose only privilege was Code write could reach release-deletion logic that should have required Releases write access, resulting in permanent removal of published releases and their attachments. The upstream fix (referenced by pull requests 39501 and 39507, and shipped in the v28.1.0 release) adds an explicit type guard - effectively 'if isDelTag && !rel.IsTag' the request is rejected with HTTP 409 Conflict - so the tag-only deletion route can no longer act on a release object. Notable mitigating interaction: Protected Tag rules covering the release's tag still blocked the deletion even on vulnerable instances, which limits real-world exposure where that configuration is in use. Authentication requirement is confirmed by the CVSS vector (PR:L), meaning a low-privileged, authenticated collaborator is sufficient; no user interaction is needed.
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:L/UI:N/S:U/C:N/I:H/A:H
Network-reachable web route, no special conditions beyond holding Code write (PR:L), no UI; permanent deletion of releases/attachments gives I:H and A:H with no data exposure (C:N).
Primary rating from Vendor (88ee5874-cf24-4952-aea0-31affedb7ff2).
CVSS VectorVendor: 88ee5874-cf24-4952-aea0-31affedb7ff2
Lifecycle Timeline
3DescriptionCVE.org
The Gitea web route for deleting tags (POST /{owner}/{repo}/tags/delete) requires only write access to the Code unit, but shares its handler with release deletion and did not check that the target was a plain tag. A collaborator with Code write access and without Releases write access could permanently delete published releases of that repository, including their attachments. Protected tag rules covering the release tag still blocked the deletion.
Technical POC Analysis
CWE-732 (Incorrect Permission Assignment for Critical Resource), with a secondary CWE-863 (Incorrect Authorization) per the advisory.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A broken access control flaw in Gitea (versions up to and including 28.0.0) allows any authenticated repository collaborator with write access to code - but not to releases - to permanently destroy published releases and their attached artifacts with a single request. Because Gitea is commonly used as an internal source-control and release-distribution platform, affected organizations risk irreversible loss of release artifacts, binaries, and provenance records that downstream teams and customers may depend on, and attribution of the deletion may be difficult. Leadership should care because the damage is destructive rather than data-exposing, requires only trusted-insider level access, and no vendor patch is currently available.
No vendor-released patch identified at time of analysis. Interim mitigations: restrict Code-unit write access to the minimum necessary trusted users and separate code-write from release-management duties; block or monitor POST requests to the /{owner}/{repo}/tags/delete route at the reverse proxy or WAF for users lacking Releases write permission; enable Gitea audit logging with alerting on tag and release deletion events; maintain and test immutable offline backups of releases and attachments to enable recovery; limit exposure of Gitea instances to trusted networks where operationally feasible.
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
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
EUVD-2026-94063
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB