CVE-2026-58053 Security Alert: CRITICAL Vulnerability
Urgent: CVE-2026-58053 requires immediate attention.
· 8 min read
Executive Summary
CVE-2026-58053 is a critical flaw in Gitea act_runner when using the Docker backend (through act 0.262.0). The runner passes a workflow’s container.options directly into Docker’s host configuration and, even with privileged: false, only disables the Privileged flag while leaving dangerous options like --pid=host, --cap-add, and --security-opt intact. That means a user who can run a workflow on a Docker-backed runner may be able to break out of the container and gain root on the host.
This is especially dangerous for solo developers and small teams because CI runners are often deployed with broad access, persistent credentials, and shared infrastructure. No KEV listing and no known in-the-wild exploitation does not make this safe to ignore: the attack path is straightforward once an attacker can submit or trigger a workflow.
Immediate Action
- Stop using the Docker-backed runner for untrusted workflows until patched or isolated. If possible, disable workflow execution from forks, external contributors, and low-trust branches.
- Upgrade act_runner / act to a fixed release as soon as the vendor publishes one. If no fixed version is available yet, roll back to a non-Docker executor or a tightly isolated runner.
- Remove or block container options in workflow jobs, especially
--pid=host,--cap-add,--security-opt,--network=host, and any mount-related flags. - Isolate the runner host: use a dedicated VM, no sensitive secrets, no SSH keys, and no access to production networks or cloud metadata endpoints.
- Review vendor guidance and release notes: Vendor advisory / release notes.
- Rotate credentials used on the runner if you suspect any malicious workflow execution.
Affected Versions
gitea/act_runnerwith the Docker backend andact 0.262.0or earlier: vulnerable.workflow container.optionspassed through to Docker HostConfig: vulnerable behavior.privileged: falseis not sufficient to mitigate the issue.act_runner@<=TODO_FIXED_VERSIONvulnerable; upgrade toact_runner@>=TODO_FIXED_VERSION.act@<=0.262.0vulnerable; upgrade toact@>=TODO_FIXED_VERSIONif a fix is released.
Resolution Guide
1) Patch or upgrade immediately
# Docker image update example
docker pull gitea/act_runner:TODO_FIXED_TAG
docker stop act-runner
docker rm act-runner
docker run -d --name act-runner \
--restart unless-stopped \
gitea/act_runner:TODO_FIXED_TAG
2) If you install via package managers, update the runner package or pin a safe version
# npm / yarn / pnpm (if you vendor or wrap act tooling)
npm i -D act@TODO_FIXED_VERSION
yarn add -D act@TODO_FIXED_VERSION
pnpm add -D act@TODO_FIXED_VERSION
# Python (if you use a wrapper or automation package)
pip install --upgrade TODO_PACKAGE_NAME==TODO_FIXED_VERSION
pipx upgrade TODO_PACKAGE_NAME
# Java (Maven / Gradle) - replace with the fixed artifact version
mvn versions:use-latest-releases
./gradlew dependencyUpdates
# Linux packages
sudo apt-get update
sudo apt-get install --only-upgrade TODO_PACKAGE_NAME
sudo yum update TODO_PACKAGE_NAME
3) Harden runner configuration
# Example hardening: disable risky container options in workflow policy
# Pseudocode / config pattern — adapt to your runner setup
allow_container_options: false
privileged: false
allow_host_network: false
allow_host_pid: false
allow_cap_add: false
allow_security_opt: false
4) Prefer safer execution modes
- Use a dedicated, disposable VM runner instead of a shared Docker host.
- Run workflows with the minimum permissions needed.
- Block self-hosted runners from executing untrusted pull requests.
5) Minimal code fix example
If you maintain a fork or wrapper, reject dangerous options before they reach Docker:
// Pseudocode: sanitize workflow-supplied container options
func sanitizeOptions(opts string) string {
blocked := []string{"--pid=host", "--cap-add", "--security-opt", "--network=host"}
for _, b := range blocked {
if strings.Contains(opts, b) {
return ""
}
}
return opts
}
Detection & Verification
Check versions
act --version
docker image ls | grep -E 'gitea/act_runner|act_runner'
docker inspect <runner-container> --format '{{.Config.Image}}'
Search workflows for dangerous options
grep -RInE 'container\.options|--pid=host|--cap-add|--security-opt|--network=host' .github workflows . 2>/dev/null
Check runner logs for suspicious container settings
docker logs act-runner 2>&1 | grep -E 'HostConfig|Privileged|cap-add|pid=host|security-opt'
Use dependency and image scanners
# Examples
npm audit
pip audit
mvn -q dependency:tree
./gradlew dependencies
docker scout cves gitea/act_runner:TODO_TAG
trivy image gitea/act_runner:TODO_TAG
Verify the fix
# Confirm the runner no longer accepts or forwards hostile container options
grep -RInE 'sanitizeOptions|allow_container_options|allow_host_pid|allow_cap_add' /etc /opt 2>/dev/null
# Re-run a harmless workflow and confirm the job container does not get host PID/caps
docker inspect <job-container> --format '{{json .HostConfig}}' | jq .
Risk and Impact
If exploited, an attacker can escape the workflow container and execute commands as root on the runner host. From there, they may steal secrets, tamper with build artifacts, modify source code, pivot into internal networks, or use the runner as a launch point for broader compromise. For small teams, the blast radius can include source repositories, deployment credentials, cloud tokens, and any systems reachable from the CI host.
Bottom line: if your Gitea runner uses Docker and accepts workflow-controlled container options, treat this as an urgent containment issue and patch or isolate immediately.