Skip to main content

Gitea act_runner CVE-2026-73802

| EUVDEUVD-2026-101107 CRITICAL
Improper Privilege Management (CWE-269)
2026-10-02 https://github.com/go-gitea/gitea GHSA-x4q3-gcj3-m6cf
9.9
CVSS 3.1 · GitHub Advisory
View

Attack ChainAIDerived

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

  1. Access
    Obtain repo workflow-submission access
  2. Delivery
    Submit YAML with host-namespace container.options
  3. Exploit
    Runner merges options into Docker HostConfig
  4. Execution
    nsenter into host PID/IPC/mount namespaces
  5. Impact
    Execute arbitrary commands as root on runner host

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Least privilege enforcement
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a Docker-backed Gitea act_runner (versions before the fix; the go module affected range is < 1.0.9-0.20260731160927-34bfa1915022, fixed in release v3.0.0) and an attacker able to submit or trigger a workflow against a repository served by that runner (authenticated per PR:L - a repo collaborator, or an untrusted fork/PR contributor on a shared runner). The exploit is honored against default configurations: crucially, the condition is NOT that privileged mode is enabled - the flaw specifically defeats the 'runner privileged mode disabled' control, because sanitizeConfig() filters only Binds and Mounts while leaving PidMode=host, IpcMode=host, CapAdd=ALL, and SecurityOpt seccomp/apparmor=unconfined intact in the HostConfig. Limiting factors: only the Docker/container backend is affected; the attacker must have workflow-execution rights; and impact severity scales with tenancy - Critical for shared/multi-tenant runners with untrusted submitters, lower for single-tenant trusted-maintainer runners.

Impact

All severity signals point to a genuine high-priority issue for the right deployment profile. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H = 9.9) describes a low-complexity, low-privilege, no-interaction attack that escapes the container boundary (S:C) to full root compromise of the runner host. The GHSA advisory publishes a complete, working attacker workflow YAML, so publicly available exploit code exists and the barrier to reproduction is effectively zero. However, this is NOT in CISA KEV, so there is no confirmed active exploitation, and no EPSS probability was provided in the input, so widespread opportunistic exploitation cannot be quantified from this data. No SSVC decision was supplied either. The PR:L requirement is important context: the attacker must be able to submit or trigger a workflow against a repository served by a shared Docker-backed act_runner, so real-world risk is concentrated in multi-tenant/shared-runner and public fork-PR setups where untrusted users can run workflows - exactly the scenario the advisory rates Critical. For single-tenant runners used only by trusted maintainers, real risk is materially lower (the advisory rates it High) because the privileged-mode-disabled control that operators rely on is silently bypassed. Net: a real priority wherever untrusted workflow submission is possible; a defense-in-depth bypass rather than a demonstrated internet-wide mass-exploitation event, given EPSS and KEV evidence are absent.

Exploit ScenarioDerived

An attacker with workflow-submission access to a repository served by a shared Docker-backed Gitea act_runner pushes (or opens a fork PR containing) a workflow whose jobs.<job>.container.options includes --pid=host --ipc=host --cap-add=ALL and seccomp/apparmor=unconfined. Because privileged mode being disabled only forces Privileged=false, these flags survive into the job container's Docker HostConfig, letting a step run nsenter -t 1 to enter host namespaces and execute arbitrary commands as root on the runner host. A working proof-of-concept workflow is published directly in the GHSA advisory, so no exploit development is required.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 02, 2026

Workflow-controlled container options in Gitea act_runner let an authenticated user who can trigger a job escape the job container into the runner host, because HostConfig fields such as PidMode=host, IpcMode=host, CapAdd=[ALL] and unconfined seccomp/AppArmor profiles survive the runner's sanitization pass and a job step can then use nsenter to execute commands as root on the host. The flaw specifically defeats the 'runner privileged mode disabled' hardening control, which only forces Privileged=false while sanitizeConfig() filters nothing but Binds and Mounts, so default Docker-backed configurations are affected below v3.0.0 (Go module gitea.com/gitea/runner < 1.0.9-0.20260731160927-34bfa1915022). Publicly available exploit code exists in the form of the advisory's minimal proof-of-concept workflow YAML, but no CISA KEV listing or confirmed active exploitation has been reported; impact scales with tenancy, being critical for shared runners accepting untrusted workflow submissions and lower for single-tenant runners restricted to trusted maintainers.

RemediationAI

Vendor-released patch: upgrade act_runner to v3.0.0, which includes the fix landed via https://gitea.com/gitea/runner/pulls/1058 and corresponds to Go module gitea.com/gitea/runner version 1.0.9-0.20260731160927-34bfa1915022 or later; pin that module revision or newer and restart all runner workers so no stale binary continues scheduling jobs. Where upgrading immediately is not possible, note that no configuration toggle fully closes the gap, so apply operational controls instead: set runners to run only single-job, ephemeral containers and treat each worker host as untrusted (removes secret persistence and cross-job pivot potential, at the cost of throughput and the need to manage host secrets out-of-band); block workflow execution from forks and untrusted contributors by requiring maintainer approval before any job runs on a privileged Docker runner (this eliminates the untrusted-author attack path but adds manual latency to contributions); move the Docker socket and shared runners onto dedicated, disposable VMs or hosts that hold no production credentials and cannot reach internal build infrastructure on the network (contains blast radius but does not prevent the container escape itself); and consider temporarily disabling the Docker backend or the container.options feature for untrusted repositories until the patched runner is deployed. Full technical details and the vendor's fix direction are in the advisory at https://github.com/go-gitea/gitea/security/advisories/GHSA-x4q3-gcj3-m6cf.

Affected VersionsENISA

Gitea Runner 0 <3.0.0

Affected Packages

go gitea.com/gitea/runner fix: 1.0.9-0.20260731160927-34bfa1915022
euvd gitea_runner fix: 3.0.0

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

The root cause is CWE-269 (Improper Privilege Management) in the Go-based act_runner that executes Gitea Actions workflows on a Docker backend (CPE pkg:go/gitea.com_gitea_runner). Workflow YAML accepted through ContainerSpec.Options is collected by RunContext.options(), concatenated with runner-level options, parsed by mergeContainerConfigs() from Docker CLI-style flags into a Docker HostConfig, and applied to the job container. When runner privileged mode is disabled, only the Privileged boolean is forced false; sanitizeConfig() filters only Binds and Mounts, so workflow-supplied namespace sharing (--pid=host, --ipc=host, --uts=host, --network=host), capability expansion (--cap-add ALL / SYS_ADMIN), and security profile overrides (--security-opt seccomp=unconfined, apparmor=unconfined) persist in the final HostConfig. Sharing the host PID namespace plus unconfined seccomp/AppArmor and full capabilities removes every container boundary that would otherwise block nsenter -t 1 -m -u -i -n -p from entering the host mount, UTS, IPC, network and PID namespaces, yielding root-equivalent command execution on the runner host. The essence of the bug is a trust-boundary failure: workflow YAML authored by a repository contributor is treated as trusted runner configuration.

Know when Docker 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

GitHub Advisory PRIMARY 9.9 CRITICAL
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
vuln.today AI 9.9 CRITICAL

Submitting a workflow over the network needs only repo workflow access (AV:N, AC:L, PR:L, UI:N); the container-to-host escape crosses a trust boundary (S:C) yielding full root impact (C/I/A:H).

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

Primary rating from GitHub Advisory.

CVSS VectorGitHub Advisory

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

DescriptionGitHub Advisory

Summary

act_runner appends workflow-controlled jobs.<job>.container.options directly to the Docker HostConfig for the job container. When runner privileged mode is disabled, only Privileged is forced false. Host namespace flags, capability expansion, and security profile overrides from workflow YAML are preserved in the final HostConfig. A workflow author can enter host PID/IPC namespaces and execute commands on the runner host as root.

Details

Source-to-sink path in act_runner:

  • ContainerSpec.Options accepts workflow YAML container.options
  • RunContext.options() appends workflow options to runner-level container options
  • Job container is created with Privileged: rc.Config.Privileged but also

with Options: rc.options(ctx)

  • mergeContainerConfigs() parses Docker CLI-style options into HostConfig
  • When privileged mode is disabled, only copts.privileged is forced false
  • sanitizeConfig() only filters Binds and Mounts
  • Preserved dangerous HostConfig fields:
text
Privileged=false
PidMode=host
IpcMode=host
CapAdd=["ALL"]
SecurityOpt=["seccomp=unconfined","apparmor=unconfined"]

Attacker workflow YAML:

yaml
jobs:
  breakout:
    runs-on: ubuntu-latest
    container:
      image: ubuntu:22.04
      options: >-
        --pid=host --ipc=host --cap-add=ALL
        --security-opt seccomp=unconfined
        --security-opt apparmor=unconfined
    steps:
      - name: host namespace marker
        run: |
          nsenter -t 1 -m -u -i -n -p -- sh -c "id > /tmp/marker"

Impact

An attacker who can submit a workflow to a repository using a shared Docker-backed act_runner can:

  • Enter host PID, IPC, and mount namespaces
  • Execute arbitrary commands as root on the runner host
  • Access runner host secrets, deployment credentials, and environment variables
  • Pivot to adjacent jobs running on the same runner
  • Access internal build infrastructure reachable from the runner host

Critical severity for shared runners where untrusted users can trigger workflows. High severity for single-tenant runners with privileged mode explicitly disabled as a security control.

Fix Direction

Treat container.options as untrusted input. Reject or strip when privileged mode is disabled:

  • Host namespaces: --pid=host, --ipc=host, --uts=host, --network=host
  • Capability expansion: --cap-add ALL, --cap-add SYS_ADMIN
  • Security overrides: --security-opt seccomp=unconfined, --security-opt apparmor=unconfined
  • Device access: --device, --device-cgroup-rule
  • Volume inheritance: --volumes-from
  • Runtime controls: --runtime, --cgroup-parent

Technical POC Analysis

CWE-269: Improper Privilege Management.

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 act_runner versions below v3.0.0 contain a critical container isolation failure that can let a job-triggering user gain root on the runner host, compromising CI/CD pipelines and any credentials or code accessible there. The risk is highest for shared runners that accept workflows from untrusted contributors, where one malicious job could affect other tenants and connected systems; publicly available exploit code exists, though no confirmed active exploitation has been reported. A vendor patch is available, so leadership should prioritize immediate inventory and remediation of affected runners.

Business Impact: Severe
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Medium
self-hosted Gitea CI runner, common in self-hosted DevOps but not ubiquitous
Threat Intel
1
1 source
Data Quality
3 sources
Confidence: Low

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 CRITICAL
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
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· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
Very High

Priority Score

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

Attack Technique

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

More in Docker

View all
CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2019-5736 HIGH POC
8.6 Feb 11

runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac

CVE-2023-32077 HIGH POC
7.5 Aug 24

Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2023-5815 HIGH POC
8.1 Nov 22

The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post

CVE-2026-66384 MEDIUM POC
5.3 Aug 12

Path traversal in JFrog Artifactory (CWE-22) enables an authenticated low-privilege user to write data outside the inten

CVE-2014-9357 CRITICAL
10.0 Dec 16

Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build

CVE-2026-52806 CRITICAL POC
9.9 Jun 23

Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config

CVE-2025-14707 HIGH POC
8.9 Dec 15

Unauthenticated remote command injection in SGWBOX N3 firmware 2.0.25 lets attackers execute arbitrary operating-system

CVE-2026-56274 HIGH POC
8.7 Jun 23

Remote code execution in Flowise before 3.1.2 allows any authenticated user (or API caller with chatflow view/update per

CVE-2026-34156 CRITICAL POC
9.9 Mar 30

Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l

CVE-2019-15752 HIGH POC
7.8 Aug 28

Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c

Vendor StatusVendor

SUSE

Severity: Critical

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