wraith-security/Legion Runner

Stop CI supply chain attacks at the network layer. Legion records and blocks every outbound connection from a GitHub Actions job and names the process behind it. Open source, self contained, no account, no data leaves the runner.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Stale
License
None
namedescriptionrequireddefault
egress-policy"audit" (monitor only, never breaks builds) or "block" (default-deny egress allowlist).noaudit
allowed-endpointsEndpoints to permit in block mode, one per line or space/comma separated, as "host" or "host:port" ( "api.nuget.org:443"). GitHub/Actions endpoints are always allowed when allow-github is true.no""
allowed-presetsComma/space-separated curated ecosystem allowlists to permit in block mode, so common toolchains "just work" without listing endpoints. Known presets: npm, yarn, pnpm, pip, pypi, cargo, rust, go, maven, gradle, nuget, apt, debian, docker. Example: "cargo, apt".no""
allow-githubAlways allow GitHub + Actions endpoints (so the job can still talk to GitHub).notrue
policy-filePath (in the repo) to the learned egress allowlist. In audit mode the observed destinations are surfaced as a baseline; in block mode this file's hosts are part of the allowlist. Commit it to enforce a reviewable policy.no.legion/egress-allowed.txt
learnIn audit mode, write/update the policy-file with the destinations observed this run (otherwise the baseline is only printed to the job summary).nofalse
learned-baselineIn block mode, also allow destinations previously learned into the Actions cache (the zero-config learn→enforce baseline). Set to "false" to enforce ONLY the explicit allowlist (inline endpoints + policy-file + GitHub), with no cache read or write.notrue
disable-sudoRevoke the runner user's sudo after setup, to stop later privilege use.nofalse
disable-telemetryDo not emit any lifecycle events (Legion link / step summary stays local).nofalse
legion-linkOptional Legion desktop endpoint (e.g. http://host:3000) to stream job egress events to.no""
dns-captureRoute the resolver through a local logging forwarder to map connections to the exact domains the job resolved (more accurate than reverse DNS). Requires sudo; falls back to reverse DNS if unavailable.notrue
ebpfUse the Rust/aya eBPF agent (legionr-bpf) for socket-layer connection capture with process attribution when present. "auto" (use if available) or "off". Falls back to the ss//proc sampler otherwise.noauto
sample-intervalSeconds between egress samples for the monitor.no3
file-integrityDetect file tampering during the job. The Rust legionr-fim agent snapshots high-value targets at job start (credential/config files, the repo's .git config + hooks, and any already-checked-out source) and reports anything overwritten, deleted, or chmod'd at job end. "auto" (use if available) or "off". Skips silently if the agent binary can't be obtained.noauto
fim-extra-pathsAdditional files to watch for tampering, one per line or space/comma separated. Useful for project-specific secrets or scripts.no""
job-summaryWrite the outbound-connections table to the GitHub job summary. Set to "false" to keep monitoring/enforcement fully active but suppress the table (useful when many jobs in one workflow each harden and you only want the summary once).notrue

no outputs