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..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
- Products
- gitea.com/gitea/runner
- Affected versions
- Not specified
- Fixed versions
- 1.0.9-0.20260731160927-34bfa1915022
- CVEs
- CVE-2026-73802
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 28 Oct 2026, 08:46 UTC · Revision 1
Source evidence
gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled
core-osv · Original sourcePublished 2 Oct 2026, 23:18 UTC
### Summary act_runner appends workflow-controlled `jobs..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
osv:GHSA-x4q3-gcj3-m6cf
gitea.com/gitea/runner
Fixed versions: 1.0.9-0.20260731160927-34bfa1915022
Complete source record
{
"id": "6831ff7488dcecaa9a4f41ddf59f57909b5ee6d023a587b01adfced8d93c147c",
"url": "https://osv.dev/vulnerability/GHSA-x4q3-gcj3-m6cf",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled",
"summary": "### Summary act_runner appends workflow-controlled `jobs..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",
"evidence": "osv:GHSA-x4q3-gcj3-m6cf",
"products": [
{
"name": {
"value": "gitea.com/gitea/runner",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "1.0.9-0.20260731160927-34bfa1915022",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": []
}
],
"severity": "critical",
"structured": {
"id": "GHSA-x4q3-gcj3-m6cf",
"aliases": [
"CVE-2026-73802",
"GHSA-x4q3-gcj3-m6cf",
"GO-2026-6656"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H"
}
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "0"
},
{
"fixed": "1.0.9-0.20260731160927-34bfa1915022"
}
]
}
],
"package": {
"name": "gitea.com/gitea/runner",
"purl": "pkg:golang/gitea.com/gitea/runner",
"ecosystem": "Go"
},
"database_specific": {
"source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/10/GHSA-x4q3-gcj3-m6cf/GHSA-x4q3-gcj3-m6cf.json"
}
}
],
"modified": "2026-10-07T17:55:44.795358931Z",
"provider": "osv",
"references": [
"https://github.com/go-gitea/gitea/security/advisories/GHSA-x4q3-gcj3-m6cf",
"https://gitea.com/gitea/runner/pulls/1058",
"https://gitea.com/gitea/runner/releases/tag/v3.0.0",
"https://github.com/go-gitea/gitea"
],
"provider_metadata": {
"cwe_ids": [
"CWE-269"
],
"severity": "CRITICAL",
"github_reviewed": true,
"nvd_published_at": null,
"github_reviewed_at": "2026-10-02T23:18:12Z"
}
},
"related_cves": [
{
"value": "CVE-2026-73802",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": "/database_specific/severity"
},
"source_id": "core-osv",
"document_id": 97124,
"published_at": "2026-10-02T23:18:12+00:00"
}gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled in gitea.com/gitea/runner
core-osv · Original sourcePublished 7 Oct 2026, 14:10 UTC
gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled in gitea.com/gitea/runner
osv:GO-2026-6656
gitea.com/gitea/runner
Fixed versions: 1.0.9-0.20260731160927-34bfa1915022
Complete source record
{
"id": "b02c1d05d19aee1527cc9846ce96aef861347d06771f3d615d178b321f7dff8b",
"url": "https://osv.dev/vulnerability/GO-2026-6656",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled in gitea.com/gitea/runner",
"summary": "gitea-runner: workflow container.options passes host namespaces and capability flags to job container when privileged mode is disabled in gitea.com/gitea/runner",
"evidence": "osv:GO-2026-6656",
"products": [
{
"name": {
"value": "gitea.com/gitea/runner",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "1.0.9-0.20260731160927-34bfa1915022",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": []
}
],
"severity": "unknown",
"structured": {
"id": "GO-2026-6656",
"aliases": [
"CVE-2026-73802",
"GHSA-x4q3-gcj3-m6cf",
"GO-2026-6656"
],
"affected": [
{
"ranges": [
{
"type": "SEMVER",
"events": [
{
"introduced": "0"
},
{
"fixed": "1.0.9-0.20260731160927-34bfa1915022"
}
]
}
],
"package": {
"name": "gitea.com/gitea/runner",
"purl": "pkg:golang/gitea.com/gitea/runner",
"ecosystem": "Go"
},
"database_specific": {
"source": "https://vuln.go.dev/ID/GO-2026-6656.json"
},
"ecosystem_specific": {}
}
],
"modified": "2026-10-07T17:45:12.474497003Z",
"provider": "osv",
"references": [
"https://github.com/go-gitea/gitea/security/advisories/GHSA-x4q3-gcj3-m6cf",
"https://gitea.com/gitea/runner/pulls/1058",
"https://gitea.com/gitea/runner/releases/tag/v3.0.0"
],
"provider_metadata": {
"url": "https://pkg.go.dev/vuln/GO-2026-6656",
"review_status": "UNREVIEWED"
}
},
"related_cves": [
{
"value": "CVE-2026-73802",
"evidence": "/aliases"
}
],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 97099,
"published_at": "2026-10-07T14:10:14+00:00"
}