Curenje tajnih podataka nije uvijek vezano za loš kod ili ranjive biblioteke. Ponekad se sve svodi na to kako upravljamo tajnim podacima tokom CI izvršavanja, a CVE‑2025‑30066 je školski primjer kako to može krenuti po zlu. GitHub akcija tj‑actions/changed‑files, koja se široko koristi za otkrivanje promijenjenih datoteka u pull requests, postao je tihi kanal za tajno curenje informacija. Evo šta se dogodilo i kako možete zaključati svoj CI/CD tajne pipeline.
Šta se dogodilo u slučaju CVE‑2025‑30066?
Sredinom marta 2025. godine, datoteka tj-actions/changed-files je bila kompromitovana. Napadač je prepisao postojeće oznake verzija (do v45.0.7) kako bi ukazivao na zlonamjerni softver. commitOvo je promijenilo ponašanje Akcije, a da programeri to nisu primijetili; nije objavljena nova verzija, samo nevidljivo mijenjanje oznaka.
Korisni teret je bio jednostavan, ali opasan: izvlačio je udaljeni Base64-kodirani Python skript koji je skenirao memoriju runnera u potrazi za vjerodajnicama, zapisivao ih u logove ili ih izvlačio. Ovo nije bila logička greška u kodu u tj-actions/changed-files; to je bila zloupotreba načina na koji se može dogoditi curenje tajnih podataka unutar CI radnih procesa korištenjem te višekratno upotrebljive akcije. CVE-2025-30066 nije se odnosio na prekoračenje bafera; radilo se o grešci u dizajnu CI-ja koja je omogućila curenje tajnih podataka.
Uticaj: Svaki repozitorij koji koristi pogođene verzije tj-akcija/promijenjenih datoteka rizikovao je curenje tajnih podataka, posebno ako su osjetljivi tokeni ili datoteke nesigurno obrađeni u obrascima datoteka ili CI izlazima.
Zašto ovo utiče na tokove rada koji se oslanjaju na akcije koje se mogu ponovo koristiti
DevSecOps tokovi rada u velikoj mjeri se oslanjaju na tj-akcije/promijenjene datoteke za:
- Automatizujte pull request čekovi
- Identifikujte promijenjene datoteke u određenim putanjama
- Izbjegavajte suvišne CI poslove
Ali ovi tokovi rada često previđaju jednu stvar: kako glob obrasci mogu uključivati osjetljive podatke. Programeri pretpostavljaju da se tj-actions/changed-files ponašaju sigurno po zadanim postavkama. Međutim, ako glob konfiguracije/** i tajne su pohranjene u configs/secrets.env, upravo ste dodali tajnu datoteku u CI izlaze ili zapise. To nije greška u Actionu; to je CI/CD greška u dizajnu koja dovodi do tajnog curenja informacija. CVE‑2025‑30066 je jasan primjer toga.
Kako je došlo do tajnog curenja informacija (Analiza ranjivosti)
Hajde da analiziramo ključni kvar koji stoji iza CVE‑2025‑30066:
- Globirajući obrasci poput **/*.env nenamjerno podudarajući tajne datoteke
- tj-actions/changed-files su tretirali te tajne datoteke kao promijenjene datoteke
- Tajne su završile u izlazima koraka, logovima ili nizvodnim poslovima
Ovo se dogodilo jer su tajne vrijednosti pohranjene u putanjama kontroliranim verzijama (loša ideja), a CI konfiguracija ih nije eksplicitno isključila iz globbing-a (također loše). Dakle, nije riječ o grešci u kodu, već o lošoj higijeni CI dizajna koja uzrokuje curenje tajnih vrijednosti s izlazima tj-akcija/promijenjenih datoteka.
Praktična putanja iskorištavanja: Od CI posla do izlaganja akreditiva
Primjer CI postavke koja je uzrokovala curenje tajnih podataka kroz tj-akcije/promijenjene datoteke:
yaml jobs: detect_changes: runs‑on: ubuntu‑latest steps: ‑ uses: actions/checkout@v3 ‑ name: Check changed files id: changed uses: tj‑actions/changed‑files@v45 with: files: configs/** If configs/secrets.env promijenjeno:
- Označeno je od strane tj-actions/changed-files
- Uključeno je u koraci.promijenjeni.izlazi.sve_promijenjene_datoteke
- Kasniji koraci su to zapisali ili proslijedili skriptama, odajući tajne.
Do ovog curenja informacija došlo je jer je CI logika tretirala tajne podatke kao obične datoteke. Tu počinje curenje tajnih podataka, ne zbog prelijevanja bafera, već zbog zloupotrebe tj-akcija/promijenjenih datoteka u manjkavom CI dizajnu.
Širenje se dešava sa izlazima kao što su:
yaml ‑ name: Use changed file list run: echo "Changed files: ${{ steps.changed.outputs.all_changed_files }}" If tajne.env se nalazi na toj listi, njegovo ime datoteke i eventualno sadržaj mogu se pojaviti u zapisnicima izgradnje. Čak i uslovna logika poput:
yaml if: contains(steps.changed.outputs.all_changed_files, 'secrets.env') Može otkriti osjetljive artefakte. Ovo je CI/CD Greška u dizajnu koja omogućava tajno curenje informacija, a ne greška u kodu akcije.
Kako sigurno koristiti višekratno upotrebljive radne tokove i spriječiti curenje
Ne morate napustiti tj-actions/changed-files. Trebali biste koristiti višekratno upotrebljive akcije s naglaskom na tajne:
Najbolje prakse za rukovanje tajnama
- Nikada nemojte koristiti tajne kontrole verzija
- Izbjegavajte glob obrasce koji odgovaraju osjetljivim putanjama
- Koristite tajne zasnovane na okruženju (GITHUB_ENV, trezori, GitHub tajne)
CI/CD konfiguracija Guardrails
- Uvijek prikači akcije na nepromjenjive SHA vrijednosti, a ne na oznake (nikada ne koristi @v45)
- Tretirajte izlaz tj-akcija/promijenjenih datoteka kao zaražen, dezinficirajte ga ili filtrirajte
- Postavi izlaze samo ako su sanirani
⚠️ Nesiguran primjer:
yaml jobs: detect_changes: runs‑on: ubuntu‑latest steps: ‑ uses: actions/checkout@v3 ‑ name: Detect all changes id: changed uses: tj‑actions/changed‑files@v45 with: files: '**/*' # ⚠️ This glob includes secrets.env, which may leak credentials Gore navedeno je upravo zloupotreba koja stoji iza tajnog curenja informacija i CVE‑2025‑30066.
Sigurna alternativa:
yaml jobs: detect_changes: runs‑on: ubuntu‑latest steps: ‑ uses: actions/checkout@v3 ‑ name: Detect non‑sensitive file changes id: changed uses: tj‑actions/changed‑files@<SHA> # pinned to SHA with: files: 'src/**' files‑ignore: '**/secrets.env' # ⚠️ Excludes secret file Na taj način izbjegavate CI/CD Greška u dizajnu koja dovodi do curenja tajnih podataka putem tj-akcija/promijenjenih datoteka.
Dodatno:
- Onemogućite ili ograničite zapisivanje podataka tamo gdje se mogu pojaviti tajne
- Koristite tajne funkcije maskiranja na GitHub-u
- Ograničite pristup zapisnicima i artefaktima izgradnje
Kontrolna lista za korištenje brzih tajni i sigurnih CI-jeva
| Najbolja praksa |
|---|
| Ne pohranjujte tajne podatke u datotekama s kontrolom verzija |
| Koristite trezore ili GitHub Secrets za vjerodajnice |
| Uvijek prikači tj-akcije/promijenjene datoteke na nepromjenjive SHA-ove |
| Filtrirajte ili dezinficirajte izlaze iz tj-akcija/promijenjenih datoteka |
| Nikada ne uključujte tajne putanje u glob obrasce |
| Maskiranje ili ograničavanje logova koji mogu otkriti osjetljive podatke |
| Često revidirajte naslijeđene CI konfiguracije |
Uloga Xygenija: Provođenje CI tajni u velikim razmjerima
Xygeni obezbje uje CI/CD pipelinefokusirajući se na kako se tajne rukuju, koriste i otkrivaju u stvarnom svijetu DevOps tokovi rada. Ne radi se samo o skeniranju koda; radi se o primjeni najboljih praksi upravljanja tajnom putem... pipeline analiza.
Detekcija nesigurnog korištenja izlaza
- Skenira GitHub akcije za upotrebu echo, run i ispisuje gdje ${{ steps.*.outputs.* }} može uključivati osjetljive vrijednosti
- Identifikuje kada se tajne referenciraju ili ispisuju direktno, namjerno ili greškom
Praćenje procurjelih tajni
- Detektira vrijednosti visoke entropije (API ključeve, tokene) unutar logova i izlaza koraka
- Aktivira upozorenja kada se tajne pojave u pipeline logovi, čak i ako su maskirani nizvodno
Pogrešno konfigurirana upotreba radnje
- Prati sve GitHub akcije pipelineza otkrivanje korištenja kompromitovanih verzija (npr. tj-akcije/promijenjene-datoteke@v45)
- Provjerava obrasce podudaranja datoteka koji uključuju potencijalne tajne poput **/*.env, *.key ili .env.*
Konkurencijska sigurnost zasnovana na politikama Guardrails
- Nameće SHA-pinning za akcije trećih strana
- Blokira korištenje nesigurnih globova datoteka koji bi mogli pomesti tajne u logove
- Sprječava pipelineod emitovanja osjetljivih vrijednosti kao dijela izlaza radnog toka
Tretiranjem radnih procesa kao dijela vaše površine prijetnji, Xygeni osigurava da tajna higijena nije samo najbolja praksa, već i ugrađena odbrana.
Zaključak: Tajno curenje informacija može započeti jednostavnom radnjom ili zloupotrebom
CVE‑2025‑30066 nije bio greška u biblioteci; to je bio CI/CD Neuspjeh u dizajnu koji proizlazi iz nepravilne upotrebe tj-akcija/promijenjenih datoteka. Šta bi DevSecOps timovi trebali naučiti:
- Tretira svaku referencu globa/datoteke u CI kao potencijalnu tačku curenja
- Redovno provjeravajte tokove rada radi slučajnog uključivanja tajni
- Koristite sigurne trezore ili tajne okruženja, nikada ne provjeravajte tajne u kontroli verzija
- Sanitizirajte ili filtrirajte sve izlaze radnog procesa
- Zabilježite osjetljive aktivnosti toka rada kako biste održali mogućnost revizije
Konfidencijalna integracija je kod. Tokovi rada su kod. Zapisnici i izlazi su kod. Čuvajte svoje tajne u svakom koraku ili riskirajte scenario curenja tajne koji ne treba hakera, već samo lošeg... CI/CD izbor dizajna.




