
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-73802 is a critical container escape vulnerability in Gitea's act_runner component, titled "gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled." It affects gitea.com/gitea/runner versions prior to 1.0.9-0.20260731160927-34bfa1915022 (or equivalently, prior to v3.0.0). The vulnerability was first published on August 15, 2026, and added to the GitHub Advisory Database on October 2, 2026. It carries a CVSS v3.1 base score of 9.9 (Critical) (GitHub Advisory, Gitea Security Advisory).
The root cause is improper privilege management (CWE-269): act_runner passes workflow-controlled jobs.<job>.container.options directly into the Docker HostConfig for the job container without adequate sanitization. The data flow is: ContainerSpec.Options accepts workflow YAML container.options → RunContext.options() appends these to runner-level options → mergeContainerConfigs() parses Docker CLI-style flags into HostConfig → sanitizeConfig() only strips Binds and Mounts, leaving dangerous fields intact. When privileged mode is disabled, only copts.privileged is forced to false; host namespace flags (--pid=host, --ipc=host), capability expansions (--cap-add=ALL), and security profile overrides (--security-opt seccomp=unconfined, --security-opt apparmor=unconfined) are all preserved in the final HostConfig. An attacker with workflow submission rights can craft a YAML payload using nsenter to execute commands in the host's PID/IPC/mount namespaces as root (GitHub Advisory, Gitea Security Advisory).
A successful exploit allows a workflow author to fully escape the job container and execute arbitrary commands as root on the runner host, even when privileged mode is explicitly disabled as a security control. The attacker can access runner host secrets, deployment credentials, and environment variables; pivot to adjacent jobs running on the same shared runner; and reach internal build infrastructure accessible from the runner host. The impact is rated Critical for shared runners where untrusted users can trigger workflows, and High for single-tenant runners where privileged mode was relied upon as a security boundary (GitHub Advisory, Gitea Security Advisory).
No public proof-of-concept exploit code or in-the-wild exploitation has been reported as of the available data (exploitedAt and proofOfConcepts fields are empty in threat intelligence). The CVE status remains "Reserved" in the NVD. The vulnerability requires only low privileges (the ability to submit a workflow to a repository) and no user interaction, making it straightforward to exploit once access is obtained. It is detectable by Qualys scanners (detection ID 5019205) and is not currently listed in the CISA KEV catalog (GitHub Advisory, Feedly).
act_runner with version < 3.0.0 where untrusted users can submit or trigger workflows.options: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"PidMode=host, IpcMode=host, and CapAdd=["ALL"] despite Privileged=false. The nsenter command enters the host's namespaces (PID 1 = host init process).nsenter execute in the host's mount, UTS, IPC, network, and PID namespaces as root, enabling arbitrary command execution, credential theft, or lateral movement to internal infrastructure (GitHub Advisory, Gitea Security Advisory).--pid=host, --ipc=host, --cap-add=ALL, --security-opt seccomp=unconfined, or --security-opt apparmor=unconfined in runner logs.PidMode: host, IpcMode: host, or CapAdd: [ALL] for a non-privileged job container.nsenter process spawned from within a CI job container; child processes of the runner's Docker container appearing in the host's process tree (e.g., sh, bash, curl, wget) with host-level namespace context./tmp/marker) by processes originating from a CI container; new cron jobs, SSH keys, or scripts added to the runner host by the runner service account.auditd) showing nsenter or namespace-switching syscalls (setns, unshare) originating from a containerized process (GitHub Advisory).The fix is available in gitea.com/gitea/runner version 1.0.9-0.20260731160927-34bfa1915022 and the tagged release v3.0.0. Operators should upgrade to v3.0.0 or later immediately. The fix treats container.options as untrusted input and rejects or strips dangerous flags when privileged mode is disabled, including host namespace flags (--pid=host, --ipc=host, --uts=host, --network=host), capability expansions (--cap-add ALL, --cap-add SYS_ADMIN), security overrides (--security-opt seccomp=unconfined, --security-opt apparmor=unconfined), device access (--device), volume inheritance (--volumes-from), and runtime controls (--runtime, --cgroup-parent). As a short-term workaround prior to patching, restrict workflow submission to trusted users only and avoid using shared runners for repositories with untrusted contributors (GitHub Advisory, Gitea Security Advisory).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."