CVE-2026-32947: Step security/harden runner Egress Policy Bypass Vulnerability
MODERATECVE-2026-32947 is a MODERATE egress policy bypass vulnerability (CWE-693: Protection Mechanism Failure) affecting Step security/harden runner libraries in the GitHub Actions ecosystem. The issue involves egress policy bypass via dns over https (doh) in harden-runner (community tier). Remediation is available by upgrading affected packages to version 2.16.0.
CVE-2026-32947 at a Glance
How to Fix CVE-2026-32947
To remediate this vulnerability, upgrade all affected Step security/harden runner dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade step-security/harden-runner to 2.16.0
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for step-security/harden-runner
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-32947, inspect your project dependencies for Step security/harden runner:
inspect dependencies for step-security/harden-runner
Analyze the terminal output to locate any version of Step security/harden runner in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.16.0), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-693: Protection Mechanism Failure, where the product does not use or incorrectly uses a protection mechanism that provides sufficient defense against directed attacks against the product. In Step security/harden runner, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-32947 Affected Step security/harden runner Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
step-security/harden-runner
|
GitHub Actions |
< 2.16.0
|
2.16.0
|
References
Frequently Asked Questions
What is CVE-2026-32947?
Which Step security/harden runner versions are affected?
What version fixes CVE-2026-32947?
Is step-security/harden-runner affected?
What CWE is associated with CVE-2026-32947?
How can I check GitHub Actions dependencies for CVE-2026-32947?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-46g3-37rh-v698",
"modified" : "2026-03-20T21:21:35Z",
"published" : "2026-03-17T18:38:16Z",
"aliases" : [ "CVE-2026-32947" ],
"summary" : "Egress Policy Bypass via DNS over HTTPS (DoH) in Harden-Runner (Community Tier)",
"details" : "## Summary\n\nA vulnerability exists in the Community Tier of Harden-Runner that allows bypassing the `egress-policy: block` network restriction using DNS over HTTPS (DoH).\n\nHarden-Runner secures GitHub Actions workflows on runners by applying network policies, including an `allowed-endpoints` configuration that limits outbound traffic to specified domains and ports (e.g., `github.com:443`). In `egress-policy: block` mode, non-compliant connections are intercepted and denied. \n\nThis vulnerability exploits DoH, a protocol that encapsulates DNS queries within HTTPS requests. By crafting a DNS query that embeds exfiltrated data as a subdomain (e.g., encoding the runner's hostname into a label), an attacker can route the request through a permitted HTTPS endpoint like `dns.google` (`8.8.8.8`'s DoH service). The resolver processes the query and forwards it to the attacker's controlled domain, achieving exfiltration without directly accessing the blocked destination. This evades Harden-Runner's domain-based filtering, as the initial HTTPS connection appears legitimate. \n\nThis vulnerability requires the attacker to already have code execution capabilities within the GitHub Actions workflow.\n\nThe Enterprise Tier of Harden-Runner is **not affected** by this vulnerability.\n\n## Impact\n\nWhen Harden-Runner is configured with `egress-policy: block` and a restrictive `allowed-endpoints` list, an attacker with existing code execution capabilities within a GitHub Actions workflow can bypass the allowed domains check via DNS over HTTPS by proxying DNS queries through a permitted resolver (e.g., Google's DoH service). This allows data exfiltration even when `allowed-endpoints` is set to only whitelisted domains.\n\nThis vulnerability affects only the Community Tier. It requires the attacker to already have code execution capabilities within the GitHub Actions workflow.\n\n## Remediation\n\n### For Community Tier Users\n\nUpgrade to Harden-Runner v2.16.0 or later. \n\n### For Enterprise Tier Users\n\nNo action required. Enterprise tier customers are not affected by this vulnerability.\n\n## Credit \n\nWe would like to thank [Devansh Batham](https://github.com/devanshbatham) for responsibly disclosing this vulnerability through our security reporting process.",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "GitHub Actions",
"name" : "step-security/harden-runner"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "2.16.0"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 2.15.1"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/step-security/harden-runner/security/advisories/GHSA-46g3-37rh-v698"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-32947"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/step-security/harden-runner"
}, {
"type" : "WEB",
"url" : "https://github.com/step-security/harden-runner/releases/tag/v2.16.0"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-693", "CWE-863" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-03-17T18:38:16Z",
"nvd_published_at" : "2026-03-20T05:16:13Z"
}
}