Skip to main content

Gitea Actions EUVDEUVD-2026-93907

| CVE-2026-104626 HIGH
Improper Enforcement of Behavioral Workflow (CWE-841)
2026-10-06 88ee5874-cf24-4952-aea0-31affedb7ff2
8.8
CVSS 3.1 · Vendor: 88ee5874-cf24-4952-aea0-31affedb7ff2
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Open fork pull request
  2. Delivery
    Inject shared concurrency-group workflow
  3. Exploit
    Cancel blocked job via sibling run
  4. Execution
    Maintainer approval reactivates cancelled job
  5. Impact
    Fork code executes on runner

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Workflow enforcement
Exploitation Conditions

Requires all of: Gitea Actions enabled on the repository; a runner configured to accept that repository's jobs; the attacker able to open a fork pull request (so a low-privileged external account on an instance permitting fork contributions); a workflow that defines a shared run-level concurrency group so the fork run lands in an approval-gated, blocked state; and a second (sibling) run in the same concurrency group that cancels the blocked job, driving the run terminal while it is still marked as needing approval. The decisive limiting factor is that a maintainer with Actions write permission must subsequently approve the run - exploitation cannot complete without that human approval action - which, combined with the need to orchestrate the concurrency-group race and have an available accepting runner, substantially narrows realistic exploitation beyond what the raw 8.8 score implies.

Impact

Signals point in different directions. CVSS is 8.8 (AV:N/AC:L/PR:L/UI:N/S:U with C:H/I:H/A:H), which on its face suggests an easily exploitable network RCE, but every other source tempers that: EPSS is only 0.16% (4th percentile), CISA SSVC rates Exploitation as 'none' and Automatable as 'no' (while Technical Impact is 'total'), the CVE is not in CISA KEV, and no public exploit was identified at time of analysis. The description also conflicts with the published vector on two points: it states exploitation requires the maintainer's later approval action, yet the vector encodes UI:N (no user interaction); and the attack depends on orchestrating a concurrency-group race (a sibling run cancelling the blocked job) rather than a single low-complexity request, which argues for higher attack complexity than AC:L - verify these with the vendor advisory. Taken together this is a genuine but conditional RCE, not a drive-by: the total-impact code execution on a runner makes it worth patching, but the low EPSS, 'none' exploitation status, absence of KEV/POC, and the dependency on a privileged maintainer approval place it as an important-but-not-emergency fix, most relevant to instances that enable Actions, accept fork pull requests, and use approval gating.

Exploit ScenarioDerived

On a Gitea instance with Actions enabled and fork PRs allowed, an attacker opens a fork pull request containing a workflow that shares a run-level concurrency group, producing a run gated behind maintainer approval. The attacker triggers a later run in the same concurrency group so it cancels the still-blocked job, leaving the run terminal yet marked as needing approval; when a maintainer later clicks approve, the already-cancelled fork job is pushed back through concurrency preparation, set to waiting, and picked up by a matching runner, executing attacker-controlled code. No public exploit code was identified at time of analysis, and the chain requires low attacker privileges (the ability to open a fork PR) plus the maintainer's approval action.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 07, 2026

Fork-controlled workflow code execution is possible in Gitea (through 1.27.3) when Actions is enabled and a repository runs a shared run-level concurrency group: an attacker who can open a fork pull request plants workflow content in an approval-gated run, a sibling run in the same concurrency group cancels the blocked job and drives the run terminal while it still carries the approval flag, and a later maintainer approval re-queues the already-cancelled job so a matching runner claims and executes it. The independent assessment rates this CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H - lower than the 8.8 base figure because the decisive step is a human maintainer approval plus a race against a sibling run and an available accepting runner - and no public exploit code has been identified at time of analysis. No public exploit identified at time of analysis; EPSS is 0.16% (4th percentile) and CISA SSVC records Exploitation: none, Automatable: no, Technical Impact: total.

RemediationAI

Upgrade to Gitea 28.0.0 (vendor-released patch), which enforces ActionRun.IsAwaitingApproval() (NeedApproval && !Status.IsDone()) at all approval paths, prevents a run from cancelling its own jobs during run-concurrency preparation, and re-evaluates concurrency before releasing approval-blocked jobs - see https://github.com/go-gitea/gitea/security/advisories/GHSA-93pj-3x56-5gc2 and https://github.com/go-gitea/gitea/pull/39399. Where upgrading is not immediately possible, the highest-value compensating control is to disable or restrict fork pull request workflows: set Actions to disabled or to not run fork workflows on sensitive repositories, at the cost of losing CI for external contributors; alternatively require maintainers to review and re-run rather than bulk-approve, since the exploit requires the maintainer's later approval action. Administrators should also avoid shared run-level concurrency groups on repositories that accept fork PRs, because the cancellation-by-sibling race is a prerequisite - this reduces CI parallelism and may lengthen pipelines - and should tighten runner scope so that no runner accepts jobs from repositories exposed to untrusted fork contributions, at the cost of manual job routing for trusted workloads. Because exploitation also needs a live accepting runner, temporarily pausing runner registration/unregistration of broad-scope runners is an effective stopgap. Note that NVD tags this entry with 'Information Disclosure', but the underlying impact is execution of fork-controlled workflow code, so remediate on that basis and treat approval-gated runs as untrusted until patched.

Affected VersionsENISA

Gitea 0 ≤1.27.3

Affected Packages

euvd gitea no fix

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

The root cause is CWE-841 (Improper Enforcement of Behavioral Workflow): Gitea's approval gate and its concurrency-preparation logic disagreed about the state of an ActionRun. Approval was previously keyed only off the NeedApproval flag, while concurrency cancellation could mark a blocked job terminal/Cancelled without clearing that flag, so an already-cancelled job could be re-processed by concurrency preparation on a later approval, flipped back to waiting, and handed to a runner. The upstream fix (PR #39399, shipped in v28.0.0) introduces ActionRun.IsAwaitingApproval() defined as NeedApproval && !Status.IsDone() and uses it at every approval entry point (API ApproveWorkflowRun, web view/ApproveAllChecks, merge-box status, and services/actions ApproveRuns). It also changes CancelPreviousJobsByRunConcurrency to drop jobs belonging to the current run via slices.DeleteFunc(job.RunID == attempt.RunID), preventing a run from cancelling its own jobs, and rewrites ApproveRuns to call PrepareToStartRunWithConcurrency, skip runs that return Blocked, and skip any job already cancelled by a sibling's concurrency within the same loop. Gitea Actions is a self-hosted CI/CD engine driven by fork pull request workflow files plus registered runners, which is why fork-supplied workflow YAML is the untrusted input here.

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

Vendor (88ee5874-cf24-4952-aea0-31affedb7ff2) PRIMARY 8.8 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.1 HIGH

Opening a fork PR needs an account (PR:L); the concurrency-cancel race raises AC:H and the mandatory maintainer approval makes it UI:R; runner code execution yields C/I/A:H.

3.1 AV:N/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:P/PR:L/UI:A/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (88ee5874-cf24-4952-aea0-31affedb7ff2).

CVSS VectorVendor: 88ee5874-cf24-4952-aea0-31affedb7ff2

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

3
CVSS changed
Oct 07, 2026 - 21:23 NVD
8.8 (None) 8.8 (HIGH)
CVE Published
Oct 06, 2026 - 20:17 cve.org
UNKNOWN (no severity yet)
CVE Published
Oct 06, 2026 - 20:17 cve.org
HIGH 8.8

DescriptionCVE.org

A user who can open a fork pull request can place workflow content with a shared run-level concurrency group into a Gitea Actions run that is awaiting approval. When a later run in that group cancels the blocked job, the run becomes terminal while still marked as needing approval. If a maintainer later approves the run, Gitea passed the already-cancelled job back through concurrency preparation, set it to waiting, and made it claimable by a matching runner, executing fork-controlled workflow code. Exploitation requires the maintainer's later approval action, Actions to be enabled, and a runner that accepts the repository's jobs.

Technical POC Analysis

No standalone public exploit code was identified at time of analysis.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Gitea deployments up to version 1.27.3 with Actions enabled are vulnerable to fork-controlled workflow code execution, allowing an attacker who can open a fork pull request to potentially execute arbitrary code on CI runners after a maintainer approval and a race condition with a sibling run. This could compromise repository secrets, build integrity, and supply chain artifacts, directly impacting development and security teams that rely on Gitea Actions for trusted CI/CD pipelines. No vendor patch is currently available, and while no public exploit has been identified, the vulnerability requires authenticated access and user interaction, making exploitation complex but impactful.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: disable Gitea Actions where not essential; avoid shared run-level concurrency groups in repositories that accept fork pull requests; enforce least-privilege, ephemeral runners with no access to sensitive secrets; require manual approval from trusted maintainers for all fork PR workflows and monitor for cancelled-then-approved runs; enable comprehensive audit logging.

Threat Intelligence Overview

EPSS Score
0.2%
Top 96% exploitable
Prevalence
Medium
popular self-hosted Git/CI service, moderate real-world deployment footprint
Data Quality
7 sources
Confidence: High

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Gitea

View all
CVE-2026-60004 CRITICAL POC
9.8

Remote code execution in Gitea (self-hosted Git service) via a code-injection flaw (CWE-94) allows attackers to run arbi

CVE-2026-27771 HIGH POC
8.2 Jul 03

Broken access control in Gitea's Composer package registry (versions up to and including 1.26.1) lets remote attackers r

CVE-2022-30781 HIGH POC
7.5 May 16

Gitea before 1.16.7 does not escape git fetch remote. Rated high severity (CVSS 7.5), this vulnerability is remotely exp

CVE-2020-14144 HIGH POC
7.2 Oct 16

The git hook feature in Gitea 1.1.0 through 1.12.5 might allow for authenticated remote code execution in customer envir

CVE-2024-6886 CRITICAL POC
10.0 Aug 06

Improper Neutralization of Input During Web Page Generation (XSS or 'Cross-site Scripting') vulnerability in Gitea Gitea

CVE-2026-20896 CRITICAL POC
9.8 Jul 03

Reverse-proxy authentication bypass in the official Gitea Docker image (versions up to and including 1.26.2) allows any

CVE-2026-59774 CRITICAL POC
9.8

Path traversal in Gitea's Org-mode (`.org`) markup renderer allows an attacker who can get Org-mode content rendered by

CVE-2026-58053 CRITICAL POC
9.4 Jun 28

Container escape in Gitea act_runner (Docker backend, through act 0.262.0) lets an authenticated user with workflow-exec

CVE-2019-11229 HIGH POC
8.8 Apr 15

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

CVE-2026-57894 HIGH POC
8.5 Jul 21

Server-side request forgery and internal repository exfiltration in Gitea before 1.27.0 lets a low-privileged authentica

CVE-2026-24791 HIGH POC
8.1 Jun 17

Authorization bypass in Gitea versions 1.22.3 through 1.26.1 allows holders of `public-only` access tokens or OAuth gran

CVE-2020-13246 HIGH POC
7.5 May 20

An issue was discovered in Gitea through 1.11.5. Rated high severity (CVSS 7.5), this vulnerability is remotely exploita

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy