V roce 2026 o 131% více nahlášených CVE denně než loni.

Bezpečnost CI/CD

Jak zastavit exfiltraci z GitHub Actions pomocí egress policy

Job v CI má k dispozici tajné údaje a spouští kód, který před minutou stáhl: akce, balíčky a jejich instalační skripty. Pokud je cokoli z toho škodlivé, nejsnazší způsob, jak tajné údaje ukrást, je poslat je na server. Egress policy rozhoduje, na které servery job smí dosáhnout, a zbytek blokuje.

Aktualizováno

Jak tajné údaje unikají z jobu v CI

Job má přístup k tokenu repozitáře, k tajným údajům, které mu byly předány, a ke všem cloudovým přihlašovacím údajům, které převezme. Kód, který v jobu běží, je může přečíst. Ven je pak může dostat několika způsoby:

  • Přes síť. Požadavkem na server, který ovládá útočník. To je kanál, který egress policy uzavírá.
  • Přes logy. Vypsáním tajných údajů, často zakódovaných, do logu jobu. V březnu 2025 CISA uvedla, že kompromitovaná akce tj-actions/changed-files vyzradila tajné údaje právě takto.
  • Přes výstupy. Artefakty, cache nebo commity pushnuté s tokenem jobu.

Nemusí jít o škodlivý balíček. AI agenta ve workflow může obrátit prompt injection skrytá v issue nebo pull requestu a ten pak použije stejné kanály.

Co egress policy dělá

Většina jobů potřebuje dosáhnout na krátký seznam cílů: registry balíčků, registry kontejnerů, hostitele zdrojového kódu a několik služeb. Egress policy tento seznam povolí a vše ostatní zablokuje. S politikou default deny požadavek na neznámého hostitele selže a tajné údaje zůstanou v jobu.

What happens when malware in a build tries to send your secrets out Left, a runner that allows all outbound traffic: the build reaches its package registry and publishes its output, then a malicious install hook sends the build's secrets to an attacker's server, and they arrive. Right, CRACI with a default-deny egress policy: the registry and publish connections are allowed, the connection to the attacker's server is blocked at the policy, and an alert is sent. The policy allows only what the build needs, so it works even against an attack nobody has seen before. Any outbound allowed build job holds your tokens and keys malicious install hook runs no egress policy package registry publish output attacker server allowed allowed secrets sent to the attacker CRACI default-deny egress policy build job on CRACI holds your tokens and keys malicious install hook runs egress policy: only what the build needs package registry publish output attacker server allowed allowed blocked blocked, and you get an alert
The policy allows only what the build needs, instead of looking for known-bad hosts, so it stops a new attack the first time it runs.

Nezavře ale všechny dveře:

  • Nezabrání vypsání tajných údajů do logů. Udržujte logy soukromé a připínejte akce na SHA commitů.
  • Cíl, který povolíte, může data stále vynášet, takže allowlist udržujte úzký.
  • Neřekne vám, které balíčky byly škodlivé. To je úkol kontroly balíčků a SBOM.

Tři způsoby, jak ji vynutit

  • Agent na runneru. StepSecurity Harden-Runner se přidává jako první krok jobu. Přiřadí každé spojení ke kroku, který ho navázal, v režimu auditu vytvoří výchozí stav a blokuje odchozí provoz ke všemu, co není na allowlistu.
  • Runner s vestavěnou politikou. CRACI vynucuje politiku jako samotný runner. Síťové kontroly nabízejí i jiní poskytovatelé runnerů, například filtrování odchozího provozu na linuxových runnerech Depot a blokující nebo poradní egress policy na Namespace.
  • Vaše vlastní síť. Vlastní (self-hosted) runnery za firewallem nebo proxy, které sami konfigurujete a udržujete.

Zavedení bez rozbitých buildů

  1. Sledujte. Během několika běhů zaznamenejte každé spojení, které job naváže.
  2. Povolte. Sestavte allowlist z toho, co job skutečně potřebuje.
  3. Blokujte. Přepněte na default deny a sledujte porušení.
  4. Vyhodnocujte. Každé nové porušení berte buď jako chybějící zdroj, nebo jako incident.

Jak to dělá CRACI

Na CRACI je egress policy součástí runneru. Ověřuje se před spuštěním jobu, neznámá pole jsou odmítnuta a při selhání vše zablokuje (fail-closed). Vestavěné předvolby pokrývají běžné zdroje balíčků, vlastní zdroje a spojení doplní zbytek. Záznam jobu uvádí každé spojení a každé zablokované jako porušení i s důvodem. Protože proxy rozumí balíčkům, stává se stejný záznam SBOM daného jobu. API vrací SBOM, síťové záznamy a údaje o původu.

CRACI zatím nemá samostatný režim auditu; je v plánu vývoje. Bez síťové politiky je provoz jobu povolen a zaznamenán v záznamu jobu, takže vidíte, co politika potřebuje, ještě než ji začnete vynucovat. CRACI spouští joby GitHub Actions na Linuxu. Viz srovnání nástrojů pro bezpečnost CI/CD a CRACI vs StepSecurity.

Egress policy v CI: časté dotazy

Co je politika odchozího provozu (egress policy) v CI?

Sada pravidel pro odchozí síťová spojení, která smí job v CI navázat. Job dosáhne na registry balíčků a služby, které potřebuje, a každý jiný cíl je zablokován.

Zastavila by egress policy kompromitaci tj-actions?

Sama o sobě ne. CISA v tomto případě uvedla, že tajné údaje unikly přes logy workflow, nikoli odesláním na externí server. Egress policy uzavírá síťový kanál; připnutí akcí na SHA commitů a soukromé logy řeší kanál logů.

Rozbije blokování odchozího provozu buildy?

Může, pokud politika vynechá zdroj, který build potřebuje. Začněte tím, že zaznamenáte, kam se job připojuje, z toho sestavte allowlist a teprve potom blokujte. Na CRACI pokrývají běžné zdroje balíčků vestavěné předvolby a zablokované spojení se v záznamu jobu zobrazí i s důvodem.

Mohu použít egress policy na runnerech hostovaných na GitHubu?

Ano, s agentem přidaným do jobu, například StepSecurity Harden-Runner. Nebo job přesuňte na runner, který politiku vynucuje sám, například CRACI.

Dejte jeden job za egress policy

Spusťte jedno workflow na CRACI a podívejte se na každé spojení, které navázalo, na hostitele, které by potřebovalo na allowlistu, a na SBOM toho, co stáhlo.

Rezervujte si demo