123% flere rapporterede CVE'er pr. dag i 2026 end sidste år.

CI/CD-sikkerhed

Stop eksfiltrering fra GitHub Actions med en egress-politik

Et CI-job har adgang til secrets og kører kode, det hentede for et minut siden: actions, pakker og deres install-scripts. Er noget af den kode ondsindet, er den nemmeste måde at stjæle secrets på at sende dem til en server. En egress-politik afgør, hvilke servere et job må nå, og blokerer resten.

Opdateret

Sådan forlader secrets et CI-job

Et job har adgang til repository-tokenet, de secrets, det får, og de cloud-legitimationsoplysninger, det overtager. Kode, der kører i jobbet, kan læse dem. Den kan derefter få dem ud på nogle få måder:

  • Over netværket. En forespørgsel til en server, angriberen kontrollerer. Det er den kanal, en egress-politik lukker.
  • Gennem logs. Secrets skrives, ofte kodet, ud i jobbets log. I marts 2025 rapporterede CISA, at den kompromitterede action tj-actions/changed-files eksponerede secrets på denne måde.
  • Gennem output. Artefakter, caches eller commits, der pushes med jobbets token.

Koden behøver ikke at være en ondsindet pakke. En AI-agent i workflowet kan kapres af prompt injection skjult i et issue eller en pull request og derefter bruge de samme kanaler.

Hvad en egress-politik gør

De fleste jobs skal nå en kort liste over destinationer: pakke-registries, container-registries, kildehosts og nogle få tjenester. En egress-politik tillader den liste og blokerer alt andet. Med en default deny-politik fejler en forespørgsel til en ukendt host, og secrets bliver i jobbet.

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.

Den lukker ikke alle døre:

  • Den forhindrer ikke, at secrets skrives ud i logs. Hold logs private, og fastlås actions på commit-SHA'er.
  • En destination, du tillader, kan stadig føre data ud, så hold allowlisten smal.
  • Den fortæller dig ikke, hvilke pakker der var ondsindede. Det er opgaven for pakkescreening og en SBOM.

Tre måder at håndhæve en på

  • En agent på runneren. StepSecurity Harden-Runner tilføjes som det første trin i et job. Den knytter hver forbindelse til det trin, der oprettede den, bygger en baseline i audit-tilstand og blokerer egress til alt uden for en allowlist.
  • En runner med indbygget politik. CRACI håndhæver politikken som selve runneren. Andre runner-udbydere tilbyder også netværkskontrol, for eksempel egress-filtrering på Depots Linux-runnere og blokerende eller rådgivende egress-politikker på Namespace.
  • Dit eget netværk. Selvhostede runnere bag en firewall eller proxy, du selv konfigurerer og vedligeholder.

Sådan ruller du den ud uden at ødelægge builds

  1. Observér. Registrér hver forbindelse, et job opretter, over nogle få kørsler.
  2. Tillad. Byg allowlisten ud fra det, jobbet faktisk har brug for.
  3. Blokér. Skift til default deny, og hold øje med overtrædelser.
  4. Gennemgå. Behandl hver ny overtrædelse som enten en manglende kilde eller en hændelse.

Sådan gør CRACI det

På CRACI er egress-politikken en del af runneren. Den valideres, før jobbet starter, ukendte felter afvises, og den blokerer ved fejl. Indbyggede presets dækker almindelige pakkekilder, og brugerdefinerede kilder og forbindelser tilføjer resten. Jobbets trace viser hver forbindelse og markerer hver blokeret forbindelse som en overtrædelse med årsagen. Fordi proxyen er pakkebevidst, bliver den samme registrering til jobbets SBOM. API'et returnerer SBOM'er, netværkstraces og provenance.

CRACI har endnu ingen dedikeret audit-tilstand; den er på roadmappen. Uden en netværkspolitik tillades et jobs trafik og registreres i trace'et, så du kan se, hvad en politik skal indeholde, før du håndhæver den. CRACI kører GitHub Actions-jobs på Linux. Se CI/CD-sikkerhedsværktøjer sammenlignet og CRACI vs StepSecurity.

Egress-politikker i CI: ofte stillede spørgsmål

Hvad er en egress-politik i CI?

Et regelsæt for de udgående netværksforbindelser, et CI-job må oprette. Jobbet kan nå de pakke-registries og tjenester, det har brug for, og alle andre destinationer blokeres.

Ville en egress-politik have stoppet kompromitteringen af tj-actions?

Ikke alene. I den sag rapporterede CISA, at secrets blev eksponeret gennem workflow-logs, ikke sendt til en ekstern server. En egress-politik lukker netværkskanalen; at fastlåse actions på commit-SHA'er og holde logs private tager sig af log-kanalen.

Ødelægger blokering af egress builds?

Det kan den, hvis politikken overser en kilde, buildet har brug for. Start med at registrere, hvad jobbet forbinder til, byg allowlisten ud fra det, og blokér derefter. På CRACI dækker indbyggede presets almindelige pakkekilder, og en blokeret forbindelse vises i jobbets trace med årsagen.

Kan jeg bruge en egress-politik på GitHub-hostede runnere?

Ja, med en agent tilføjet til jobbet, for eksempel StepSecurity Harden-Runner. Eller flyt jobbet til en runner, der selv håndhæver politikken, for eksempel CRACI.

Sæt ét job bag en egress-politik

Kør ét workflow på CRACI, og se hver forbindelse, det oprettede, hvilke en default deny-politik ville blokere, og SBOM'en for det, det hentede.

Book en demo