Curenje tajnih podataka nije uvijek povezano s lošim kodom ili ranjivim bibliotekama. Ponekad se sve svodi na to kako upravljamo tajnim podacima tijekom 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 što se dogodilo i kako možete zaključati svoje CI/CD tajne pipeline.
Što se dogodilo u slučaju CVE‑2025‑30066?
Sredinom ožujka 2025. kompromitirana je datoteka tj-actions/changed-files. Napadač je prepisao postojeće oznake verzija (do v45.0.7) kako bi ukazivale na zlonamjerni program. commitTo je promijenilo ponašanje Akcije, a da to programeri nisu primijetili; nije objavljena nova verzija, samo nevidljivo mijenjanje oznaka.
Korisni teret bio je jednostavan, ali opasan: izvukao je udaljenu Python skriptu kodiranu Base64 koja je skenirala memoriju runnera u potrazi za vjerodajnicama, ispisujući ih u zapisnike ili ih izdvajajući. Ovo nije bila logička greška u kodu u tj-actions/changed-files; to je bila zlouporaba načina na koji se može dogoditi curenje tajni unutar CI tijekova rada pomoću te višekratno upotrebljive akcije. CVE-2025-30066 nije se odnosio na prelijevanje međuspremnika; radilo se o kvaru u dizajnu CI-ja koji je omogućio curenje tajni.
Utjecaj: Svako spremište koje koristi pogođene verzije tj-akcija/promijenjenih datoteka riskiralo je curenje tajnih podataka, posebno ako su osjetljivi tokeni ili datoteke nesigurno obrađeni u uzorcima datoteka ili CI izlazima.
Zašto ovo utječe na tijekove rada koji se oslanjaju na radnje koje se mogu ponovno koristiti
DevSecOps tijekovi rada uvelike se oslanjaju na tj-akcije/promijenjene datoteke za:
- automatizirati pull request Provjere
- Identificirajte promijenjene datoteke u određenim putanjama
- Izbjegavajte suvišne CI poslove
Ali ovi tijekovi rada često previđaju jednu stvar: kako glob obrasci mogu uključivati osjetljive podatke. Razvojni programeri pretpostavljaju da se tj-actions/changed-files ponašaju sigurno prema zadanim postavkama. Međutim, ako glob konfiguracije/** i tajne su pohranjene u configs/secrets.env, upravo ste dodali tajnu datoteku u CI izlaze ili zapisnike. To nije greška u Radnji; to je CI/CD kvar u dizajnu koji dovodi do tajnog curenja informacija. CVE‑2025‑30066 je jasan primjer toga.
Kako je došlo do tajnog curenja informacija (analiza ranjivosti)
Analizirajmo 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, zapisnicima ili nizvodnim poslovima
To se dogodilo jer su tajne vrijednosti pohranjene u putanjama kontroliranim verzijama (loša ideja), a CI konfiguracija ih nije eksplicitno isključila iz globbiranja (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čni put iskorištavanja: Od CI posla do izloženosti vjerodajnicama
Primjer CI postavke koja je uzrokovala curenje tajnih podataka putem tj-akcija/promijenjenih datoteka:
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 pomoću tj-actions/changed-files
- Uključeno je u koraci.promijenjeni.izlazi.sve_promijenjene_datoteke
- Kasniji koraci su to zabilježili ili proslijedili skriptama, odajući tajne
Do ovog curenja došlo je jer je CI logika tretirala tajne podatke kao obične datoteke. Tu počinje curenje tajnih podataka, ne zbog prelijevanja međuspremnika, već zbog zlouporabe tj-akcija/promijenjenih datoteka u manjkavom CI dizajnu.
Širenje se događa s izlazima poput:
yaml ‑ name: Use changed file list run: echo "Changed files: ${{ steps.changed.outputs.all_changed_files }}" If tajne.env je na tom popisu, njegov naziv datoteke i eventualno sadržaj mogu se pojaviti u zapisnicima izrade. Čak i uvjetna 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ćuje tajno curenje, a ne greška u kodu akcije.
Kako sigurno koristiti višekratno upotrebljive radne procese 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 uzorke koji odgovaraju osjetljivim putanjama
- Koristite tajne temeljene na okruženju (GITHUB_ENV, trezori, GitHub tajne)
CI/CD konfiguracija Guardrails
- Uvijek prikvači akcije na nepromjenjive SHA-ove, 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 dezinficirani
⚠️ 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 zlouporaba 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 Time izbjegavate CI/CD neuspjeh u dizajnu koji 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 GitHubove tajne značajke maskiranja
- Ograniči pristup zapisnicima i artefaktima izgradnje
Kontrolni popis za korištenje sigurnosne konfiguracije (CI) za brzi pristup Secrets
| Najbolja vježba |
|---|
| Ne pohranjujte tajne podatke u datoteke s kontroliranim verzijama |
| Koristite trezore ili GitHub Secrets za vjerodajnice |
| Uvijek prikvači tj-radnje/promijenjene datoteke na nepromjenjive SHA-ove |
| Filtriranje ili čišćenje izlaza iz tj-akcija/promijenjenih datoteka |
| Nikada ne uključujte tajne putove u glob obrasce |
| Maskiranje ili ograničavanje zapisnika koji mogu otkriti osjetljive podatke |
| Često revidirajte naslijeđene CI konfiguracije |
Uloga Xygenija: Provođenje tajni CI-ja u velikim razmjerima
Xygeni Osigurava CI/CD pipelinefokusirajući se na kako se tajne rukuju, koriste i otkrivaju u stvarnom svijetu DevOps tijekovi rada. Ne radi se samo o skeniranju koda; radi se o provođenju najboljih praksi upravljanja tajnom putem pipeline analiza.
Otkrivanje nesigurne upotrebe izlaza
- Skenira GitHub akcije za upotrebu echo, run i ispisuje gdje je ${{ steps.*.outputs.* }} može uključivati osjetljive vrijednosti
- Identificira kada se na tajne podatke upućuje ili ispisuje izravno, namjerno ili greškom
Praćenje procurilih tajni
- Detektira vrijednosti visoke entropije (API ključeve, tokene) unutar zapisnika i izlaza koraka
- Pokreće upozorenja kada se tajne pojave u pipeline zapisnici, čak i ako su maskirani nizvodno
Pogrešno konfigurirana upotreba radnje
- Prati sve GitHub akcije pipelineza otkrivanje korištenja kompromitiranih verzija (npr. tj-akcije/promijenjene-datoteke@v45)
- Provjerava obrasce podudaranja datoteka koji uključuju potencijalne tajne poput **/*.env, *.key ili .env.*
Konkurenčna sigurnost temeljena na pravilima Guardrails
- Provodi SHA-pinning za radnje trećih strana
- Blokira korištenje nesigurnih globova datoteka koje bi mogle pomesti tajne u zapisnike
- sprečava pipelineod emitiranja osjetljivih vrijednosti kao dijela izlaza tijeka rada
Tretiranjem tijekova rada kao dijela vaše površine prijetnji, Xygeni osigurava da tajna higijena nije samo najbolja praksa, već ugrađena obrana.
Zaključak: Tajno curenje informacija može započeti jednostavnom zlouporabom radnje
CVE‑2025‑30066 nije bio bug u biblioteci; bio je to CI/CD Neuspjeh u dizajnu koji proizlazi iz nepravilne upotrebe tj-akcija/promijenjenih datoteka. Što bi DevSecOps timovi trebali naučiti:
- Tretira svaku referencu globa/datoteke u CI kao potencijalnu točku curenja
- Redovito provjeravajte tijekove 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 tijeka rada
- Zabilježite osjetljive aktivnosti tijeka rada kako biste održali mogućnost revizije
CI je kod. Tijekovi rada su kod. Zapisnici i izlazi su kod. Čuvajte svoje tajne u svakom koraku ili riskirajte scenarij curenja tajne koji ne treba hakera, samo lošu osobu. CI/CD izbor dizajna.




