CargoWall is an eBPF firewall that runs in the kernel of every runner. It only lets a workflow, or the AI agent running in it, reach the destinations its policy allows, so a compromised action has nowhere to send your secrets.
47
destinations seen
38
allowed by policy
9
blocked this week
Policies
acme-corp12 rules
payments-api+4 rules
release.yml+2 rules
coding-agent+6 rules
Live decisions
Trusted by teams managing GitHub at scale
Why runner egress matters
A runner can reach any host on the internet by default. Every one of these attacks needed exactly that: one outbound connection to somewhere the workflow never should have talked to.
A stolen token let attackers rewrite version tags. The payload dumped CI/CD secrets (cloud keys, GitHub tokens, private keys) into workflow logs across more than 23,000 repositories.
Attackers force-pushed 75 of 76 version tags on Aqua Security's official Trivy scanner action, turning a security tool into an exfiltration channel.
A compromised maintainer account pushed malicious workflows into a popular open source project, pivoting through CI toward downstream consumers and their secrets.
The same pattern, on AI agents
Agents fetch packages, call APIs and model providers, and act on prompts nobody fully controls. Private data, untrusted input and open egress is the combination that leaks credentials. CargoWall gives agent runtimes their own policies, so they can do the job without an open door to the internet.
Sources: CISA alert (CVE-2025-30066), Wiz Research, StepSecurity, Aqua Security, Palo Alto Networks Unit 42.
CargoWall
Supply chain attacks on GitHub Actions steal secrets by sending them somewhere. CargoWall's eBPF firewall sits on every runner and only lets a job reach what its policy allows.
Every outbound connection logged for every job, nothing blocked.
Policies generated from what your workflows actually reach.
Anything outside policy is dropped in the kernel, before a byte leaves.
What CargoWall does
Per workflow, per repository or across the organization. The most specific policy wins.
Hostnames, IP addresses and CIDR blocks, IPv4 and IPv6. DNS queries are filtered in the kernel, so tunnels never leave the runner.
GitHub-hosted and self-hosted runners, including Docker and Kubernetes. No proxy and no runner changes.
Decisions happen in the kernel data path, with no userspace proxy, packet copying or TLS termination.
Every connection attempt with its workflow, job, destination, port and decision, allowed or blocked.
Workflow steps cannot use sudo to change network configuration, unload the firewall or bypass policy.
CodeCargo adds the CargoWall action to every workflow as pull requests, across hundreds of repositories at once.
Separate, flexible allowlists for AI coding agents, so they can reach what they need and nothing else.
When something breaks upstream
When an action you depend on is compromised, CodeCargo finds every workflow that uses it, proposes the whole response at once, and runs it the moment one approver says yes. Every safety rule still applies; only the waiting goes away.
Scoped
9 workflows in 6 repositories use the compromised action
Contained
Action blocked in the org; every use pinned to the last known-good commit
Traced
2 runs contacted the attacker; 4 secrets they could reach, with owners
Closed
Secrets rotated, pins verified, incident report ready for the auditors
Part of Secure
Secure pairs CargoWall with guardrails on every workflow, GHAS alert triage and compromised-action response, in one place for your security team.
See how Secure works →And in Manage
Manage keeps every workflow secure, cheap and on standard, at the autonomy you set, including moving workflows from CargoWall audit to enforce.
See how Manage works →What security and platform teams ask before they put a firewall on their runners.
CargoWall is an eBPF-based egress firewall for GitHub Actions runners and AI agent runtimes. It enforces network policies in the kernel, so a workflow can only reach the destinations its policy allows. It is part of CodeCargo Secure.
Each workflow needs a small CargoWall action. CodeCargo adds it for you across your organization as pull requests, so nobody edits workflows by hand.
No. Policy decisions happen in the kernel data path with no userspace proxy, packet copying or TLS termination, so the overhead is comparable to iptables rules.
Yes. Audit mode logs every connection and policy decision without blocking anything. CodeCargo suggests policies from what your workflows actually reach, and you switch to enforce when you are ready, per workflow or repository.
Yes. CargoWall works on GitHub-hosted and self-hosted runners, including Docker and Kubernetes.
Per workflow, per repository or across the organization, with the most specific policy taking precedence. Policies allow hostnames, IP addresses and CIDR blocks.
CargoWall intercepts DNS queries in the kernel and blocks unauthorized resolutions before the query leaves the runner, which stops DNS tunneling and hostname-based exfiltration.
No. Sudo lockdown stops workflow steps from using sudo to change network configuration, unload the eBPF programs or bypass policy.
It is dropped in the kernel before it is established, and logged with the workflow, job, destination and the policy that blocked it.