From 262b25a50b2c0fb31e84417f42e3436fc4ff8485 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 25 Jun 2025 00:23:07 +0000 Subject: [PATCH] Translated ['src/pentesting-ci-cd/github-security/abusing-github-actions --- src/images/CH_logo_ads.png | Bin 0 -> 27107 bytes .../abusing-github-actions/README.md | 159 +++++++++++------- 2 files changed, 100 insertions(+), 59 deletions(-) create mode 100644 src/images/CH_logo_ads.png diff --git a/src/images/CH_logo_ads.png b/src/images/CH_logo_ads.png new file mode 100644 index 0000000000000000000000000000000000000000..b407c8929d67e14a8e254ad9bc76ac1e9f8525f7 GIT binary patch literal 27107 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 [!WARNING] -> Github moet 'n [**vloei**](https://github.com/github/roadmap/issues/74) vrystel wat **kruis-repo** toegang binne GitHub toelaat, sodat 'n repo ander interne repos met die `GITHUB_TOKEN` kan benader. +> Github moet 'n [**flow**](https://github.com/github/roadmap/issues/74) vrystel wat **cross-repository** toegang binne GitHub toelaat, sodat 'n repo ander interne repos kan benader met die `GITHUB_TOKEN`. Jy kan die moontlike **toestemmings** van hierdie token sien in: [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token) -Let daarop dat die token **verval nadat die taak voltooi is**.\ +Let daarop dat die token **verval nadat die werk voltooi is**.\ Hierdie tokens lyk soos volg: `ghs_veaxARUji7EXszBMbhkr4Nz2dYz0sqkeiur7` Sommige interessante dinge wat jy met hierdie token kan doen: @@ -85,7 +95,7 @@ https://api.github.com/repos///pulls \
-lys geheime in Github Action-uitset +lys geheime in Github Action uitvoer ```yaml name: list_env on: @@ -134,24 +144,24 @@ secret_postgress_pass: ${{secrets.POSTGRESS_PASSWORDyaml}} ```
-Dit is moontlik om die toestemmings wat aan 'n Github Token gegee is in ander gebruikers se repositories **te kontroleer deur die logs** van die aksies: +Dit is moontlik om die toestemmings wat aan 'n Github Token in ander gebruikers se repositories gegee is, te kontroleer deur die **logs** van die aksies te kyk:
## Toegelate Uitvoering > [!NOTE] -> Dit sou die maklikste manier wees om Github aksies te kompromitteer, aangesien hierdie geval veronderstel dat jy toegang het om **nuwe repo in die organisasie te skep**, of **skryfregte oor 'n repository** het. +> Dit sou die maklikste manier wees om Github aksies te kompromitteer, aangesien hierdie geval veronderstel dat jy toegang het om **'n nuwe repo in die organisasie te skep**, of **skryfregte oor 'n repository** het. > -> As jy in hierdie scenario is, kan jy net die [Post Exploitation techniques](#post-exploitation-techniques-from-inside-an-action) kontroleer. +> As jy in hierdie scenario is, kan jy net die [Post Exploitation techniques](#post-exploitation-techniques-from-inside-an-action) nagaan. ### Uitvoering vanaf Repo Skepping -In die geval dat lede van 'n organisasie **nuwe repos** kan **skep** en jy kan github aksies uitvoer, kan jy **nuwe repo skep en die geheime wat op organisasievlak gestel is, steel**. +In die geval dat lede van 'n organisasie **nuwe repos** kan **skep** en jy kan github aksies uitvoer, kan jy **'n nuwe repo skep en die geheime wat op organisasievlak gestel is, steel**. ### Uitvoering vanaf 'n Nuwe Tak -As jy **n nuwe tak in 'n repository wat reeds 'n Github Action** geconfigureer het, kan **skep**, kan jy dit **wysig**, die inhoud **oplaai**, en dan **daardie aksie vanaf die nuwe tak uitvoer**. Op hierdie manier kan jy **repository en organisasievlak geheime** **uitvoer** (maar jy moet weet hoe hulle genoem word). +As jy **'n nuwe tak in 'n repository wat reeds 'n Github Action** geconfigureer het, kan **skep**, kan jy dit **wysig**, die inhoud **oplaai**, en dan **daardie aksie vanaf die nuwe tak uitvoer**. Op hierdie manier kan jy **repository en organisasievlak geheime** **uitvoer** (maar jy moet weet hoe hulle genoem word). Jy kan die gewysigde aksie **handmatig** uitvoerbaar maak, wanneer 'n **PR geskep word** of wanneer **enige kode gepush word** (afhangende van hoe luidrugtig jy wil wees): ```yaml @@ -170,7 +180,7 @@ branches: ## Forked Uitvoering > [!NOTE] -> Daar is verskillende triggers wat 'n aanvaller kan toelaat om 'n **Github Action van 'n ander repository** te **uitvoer**. As daardie triggerbare aksies swak geconfigureer is, kan 'n aanvaller in staat wees om hulle te kompromitteer. +> Daar is verskillende triggers wat 'n aanvaller kan toelaat om 'n **Github Action van 'n ander repository** te **uitvoer**. As daardie triggerbare aksies swak gekonfigureer is, kan 'n aanvaller in staat wees om hulle te kompromitteer. ### `pull_request` @@ -181,25 +191,25 @@ Die werksvloei-trigger **`pull_request`** sal die werksvloei uitvoer elke keer a > [!NOTE] > Aangesien die **standaard beperking** vir **eerste keer** bydraers is, kan jy bydrae **deur 'n geldige fout/typo te herstel** en dan **ander PRs stuur om jou nuwe `pull_request` voorregte te misbruik**. > -> **Ek het dit getoets en dit werk nie**: ~~Nog 'n opsie sou wees om 'n rekening te skep met die naam van iemand wat by die projek bygedra het en sy rekening te verwyder.~~ +> **Ek het dit getoets en dit werk nie**: ~~‘n Ander opsie sou wees om 'n rekening te skep met die naam van iemand wat by die projek bygedra het en sy rekening te verwyder.~~ -Boonop, standaard **voorkom skryfrechten** en **geheime toegang** tot die teikengebruikersrepo soos genoem in die [**dokumentasie**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories): +Boonop **verhoed dit standaard skryfrechten** en **toegang tot geheime** tot die teikrepository soos genoem in die [**dokumentasie**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories): -> Met die uitsondering van `GITHUB_TOKEN`, **word geheime nie aan die hardeware oorgedra** wanneer 'n werksvloei geaktiveer word vanaf 'n **forked** repository. Die **`GITHUB_TOKEN` het lees-slegs regte** in pull requests **van forked repositories**. +> Met die uitsondering van `GITHUB_TOKEN`, **word geheime nie aan die hardeware oorgedra** wanneer 'n werksvloei van 'n **forked** repository geaktiveer word nie. Die **`GITHUB_TOKEN` het slegs leesregte** in pull requests **van forked repositories**. 'n Aanvaller kan die definisie van die Github Action wysig om arbitrêre dinge uit te voer en arbitrêre aksies by te voeg. Hy sal egter nie in staat wees om geheime te steel of die repo te oorskryf nie weens die genoem beperkings. > [!CAUTION] > **Ja, as die aanvaller in die PR die github action wat geaktiveer sal word, verander, sal sy Github Action die een wees wat gebruik word en nie die een van die oorspronklike repo nie!** -Aangesien die aanvaller ook die kode wat uitgevoer word, beheer, selfs al is daar geen geheime of skryfrechten op die `GITHUB_TOKEN` nie, kan 'n aanvaller byvoorbeeld **kwaadwillige artefakte oplaai**. +Aangesien die aanvaller ook die kode wat uitgevoer word, beheer, kan 'n aanvaller byvoorbeeld **kwaadaardige artefakte oplaai**, selfs al is daar nie geheime of skryfrechten op die `GITHUB_TOKEN` nie. ### **`pull_request_target`** -Die werksvloei-trigger **`pull_request_target`** het **skryfrechten** tot die teikengebruikersrepo en **toegang tot geheime** (en vra nie vir toestemming nie). +Die werksvloei-trigger **`pull_request_target`** het **skryfrechten** tot die teikrepository en **toegang tot geheime** (en vra nie vir toestemming nie). Let daarop dat die werksvloei-trigger **`pull_request_target`** **in die basis konteks** loop en nie in die een gegee deur die PR nie (om **nie onbetroubare kode uit te voer**). Vir meer inligting oor `pull_request_target` [**kyk die dokumentasie**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\ -Boonop, vir meer inligting oor hierdie spesifieke gevaarlike gebruik, kyk hierdie [**github blog pos**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). +Boonop, vir meer inligting oor hierdie spesifieke gevaarlike gebruik, kyk hierdie [**github blogpos**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). Dit mag lyk asof die **uitgevoerde werksvloei** die een is wat in die **basis** gedefinieer is en **nie in die PR nie**, dit is **veilig** om **`pull_request_target`** te gebruik, maar daar is 'n **paar gevalle waar dit nie is nie**. @@ -209,7 +219,7 @@ En hierdie een sal **toegang tot geheime** hê. Die [**workflow_run**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_run) trigger laat toe om 'n werksvloei van 'n ander een te laat loop wanneer dit `voltooi`, `gevraag` of `in_progress` is. -In hierdie voorbeeld is 'n werksvloei geconfigureer om te loop nadat die aparte "Toetse Loop" werksvloei voltooi is: +In hierdie voorbeeld is 'n werksvloei geconfigureer om te loop nadat die aparte "Toets Loop" werksvloei voltooi is: ```yaml on: workflow_run: @@ -217,9 +227,9 @@ workflows: [Run Tests] types: - completed ``` -Boonop, volgens die dokumentasie: Die werksvloei wat deur die `workflow_run` gebeurtenis begin is, kan **toegang tot geheime hê en tokens skryf, selfs al was die vorige werksvloei nie**. +Moreover, volgens die dokumentasie: Die werksvloei wat deur die `workflow_run` gebeurtenis begin is, kan **toegang tot geheime hê en tokens skryf, selfs al was die vorige werksvloei nie**. -Hierdie tipe werksvloei kan aangeval word as dit **afhang** van 'n **werksvloei** wat deur 'n eksterne gebruiker via **`pull_request`** of **`pull_request_target`** geaktiveer kan word. 'n Paar kwesbare voorbeelde kan [**in hierdie blog gevind word**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Die eerste een bestaan uit die **`workflow_run`** geaktiveerde werksvloei wat die aanvaller se kode aflaai: `${{ github.event.pull_request.head.sha }}`\ +Hierdie tipe werksvloei kan aangeval word as dit **afhang** van 'n **werksvloei** wat deur 'n eksterne gebruiker via **`pull_request`** of **`pull_request_target`** geaktiveer kan word. 'n Paar kwesbare voorbeelde kan [**in hierdie blog gevind word**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)**.** Die eerste een bestaan uit die **`workflow_run`** geaktiveerde werksvloei wat die aanvallerskode aflaai: `${{ github.event.pull_request.head.sha }}`\ Die tweede een bestaan uit **die oordrag** van 'n **artefak** van die **onbetroubare** kode na die **`workflow_run`** werksvloei en die gebruik van die inhoud van hierdie artefak op 'n manier wat dit **kwesbaar maak vir RCE**. ### `workflow_call` @@ -230,18 +240,18 @@ TODO: Kontroleer of wanneer dit vanaf 'n pull_request uitgevoer word, die gebrui ## Misbruik van Geforkte Uitvoering -Ons het al die maniere genoem waarop 'n eksterne aanvaller 'n github werksvloei kan laat uitvoer, kom ons kyk nou na hoe hierdie uitvoerings, as dit sleg geconfigureer is, misbruik kan word: +Ons het al die maniere genoem waarop 'n eksterne aanvaller 'n github werksvloei kan laat uitvoer, nou kom ons kyk na hoe hierdie uitvoerings, as dit sleg gekonfigureer is, misbruik kan word: ### Onbetroubare checkout uitvoering -In die geval van **`pull_request`,** sal die werksvloei in die **konteks van die PR** uitgevoer word (so dit sal die **kwesbare PR se kode** uitvoer), maar iemand moet dit **eers goedkeur** en dit sal met 'n paar [beperkings](#pull_request) loop. +In die geval van **`pull_request`,** sal die werksvloei in die **konteks van die PR** uitgevoer word (so dit sal die **kwesbare PR-kode** uitvoer), maar iemand moet dit **eers goedkeur** en dit sal met 'n paar [beperkings](#pull_request) loop. In die geval van 'n werksvloei wat **`pull_request_target` of `workflow_run`** gebruik wat afhang van 'n werksvloei wat geaktiveer kan word vanaf **`pull_request_target` of `pull_request`** sal die kode van die oorspronklike repo uitgevoer word, so die **aanvaller kan nie die uitgevoerde kode beheer nie**. > [!CAUTION] -> egter, as die **aksie** 'n **duidelike PR checkout** het wat **die kode van die PR** (en nie van die basis nie) sal **kry**, sal dit die aanvaller se beheerde kode gebruik. Byvoorbeeld (kyk na lyn 12 waar die PR kode afgelaai word): +> egter, as die **aksie** 'n **duidelike PR checkout** het wat **die kode van die PR** (en nie van die basis nie) sal **kry**, sal dit die aanvallers beheerde kode gebruik. Byvoorbeeld (kyk na lyn 12 waar die PR-kode afgelaai word): -
# ONBEVEILIG. Verskaf slegs as 'n voorbeeld.
+
# ONVEILIG. Verskaf net as 'n voorbeeld.
 on:
 pull_request_target
 
@@ -269,14 +279,14 @@ message: |
 Dankie!
 
-Die potensieel **onbetroubare kode word tydens `npm install` of `npm build`** uitgevoer aangesien die bou skripte en verwysde **pakkette deur die outeur van die PR** beheer word. +Die potensieel **onbetroubare kode word tydens `npm install` of `npm build` uitgevoer** aangesien die bou skripte en verwysde **pakkette deur die skrywer van die PR** beheer word. > [!WARNING] -> 'n github dork om vir kwesbare aksies te soek is: `event.pull_request pull_request_target extension:yml` egter, daar is verskillende maniere om die werksgeleenthede veilig uit te voer selfs al is die aksie onveilig geconfigureer (soos om voorwaardes te gebruik oor wie die akteur is wat die PR genereer). +> 'n github dork om vir kwesbare aksies te soek is: `event.pull_request pull_request_target extension:yml` egter, daar is verskillende maniere om die werksgeleenthede veilig uit te voer selfs al is die aksie onveilig gekonfigureer (soos om voorwaardes te gebruik oor wie die akteur is wat die PR genereer). ### Konteks Skrip Injekties -Let daarop dat daar sekere [**github kontekste**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) is waarvan die waardes **beheer** word deur die **gebruiker** wat die PR skep. As die github aksie daardie **data gebruik om enigiets uit te voer**, kan dit lei tot **arbitraire kode uitvoering:** +Let daarop dat daar sekere [**github kontekste**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) is waarvan die waardes **beheer** word deur die **gebruiker** wat die PR skep. As die github aksie daardie **data gebruik om enigiets uit te voer**, kan dit lei tot **arbitraire kode-uitvoering:** {{#ref}} gh-actions-context-script-injections.md @@ -284,23 +294,63 @@ gh-actions-context-script-injections.md ### **GITHUB_ENV Skrip Injektion** -Volgens die dokumentasie: Jy kan 'n **omgewing veranderlike beskikbaar maak vir enige daaropvolgende stappe** in 'n werksvloei taak deur die omgewing veranderlike te definieer of op te dateer en dit na die **`GITHUB_ENV`** omgewing lêer te skryf. +Volgens die dokumentasie: Jy kan 'n **omgewing veranderlike beskikbaar maak vir enige daaropvolgende stappe** in 'n werksvloei werk deur die omgewing veranderlike te definieer of op te dateer en dit na die **`GITHUB_ENV`** omgewing lêer te skryf. -As 'n aanvaller **enige waarde** binne hierdie **env** veranderlike kan **injekteer**, kan hy env veranderlikes inbring wat kode in daaropvolgende stappe kan uitvoer soos **LD_PRELOAD** of **NODE_OPTIONS**. +As 'n aanvaller **enige waarde** binne hierdie **env** veranderlike kan **injekteer**, kan hy env veranderlikes in die volgende stappe inbring wat kode kan uitvoer soos **LD_PRELOAD** of **NODE_OPTIONS**. -Byvoorbeeld ([**hierdie**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) en [**hierdie**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), stel jou voor 'n werksvloei wat 'n geuploade artefak vertrou om sy inhoud binne die **`GITHUB_ENV`** env veranderlike te stoor. 'n Aanvaller kan iets soos dit oplaai om dit te kompromitteer: +Byvoorbeeld ([**hierdie**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) en [**hierdie**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), stel jou voor 'n werksvloei wat 'n geuploade artefak vertrou om sy inhoud binne die **`GITHUB_ENV`** env veranderlike te stoor. 'n aanvaller kan iets soos dit oplaai om dit te kompromitteer:
-### Kwesbare Derdeparty Github Aksies +### Dependabot en ander vertroude bots + +Soos aangedui in [**hierdie blogpos**](https://boostsecurity.io/blog/weaponizing-dependabot-pwn-request-at-its-finest), het verskeie organisasies 'n Github Aksie wat enige PRR van `dependabot[bot]` soos in: +```yaml +on: pull_request_target +jobs: +auto-merge: +runs-on: ubuntu-latest +if: ${ { github.actor == 'dependabot[bot]' }} +steps: +- run: gh pr merge $ -d -m +``` +Wat 'n probleem is omdat die `github.actor` veld die gebruiker bevat wat die laaste gebeurtenis veroorsaak het wat die werksvloei geaktiveer het. En daar is verskeie maniere om die `dependabot[bot]` gebruiker te laat 'n PR wysig. Byvoorbeeld: + +- Fork die slagoffer se repository +- Voeg die kwaadwillige payload by jou kopie +- Aktiveer Dependabot op jou fork deur 'n verouderde afhanklikheid by te voeg. Dependabot sal 'n tak skep wat die afhanklikheid met kwaadwillige kode regmaak. +- Maak 'n Pull Request na die slagoffer se repository vanaf daardie tak (die PR sal deur die gebruiker geskep word, so niks sal nog gebeur nie) +- Dan, gaan die aanvaller terug na die aanvanklike PR wat Dependabot in sy fork geopen het en voer `@dependabot recreate` uit +- Dan, voer Dependabot 'n paar aksies in daardie tak uit, wat die PR oor die slagoffer repo gewysig het, wat `dependabot[bot]` die akteur van die laaste gebeurtenis maak wat die werksvloei geaktiveer het (en gevolglik, die werksvloei loop). + +Gaan voort, wat as die Github Action in plaas van om te meng 'n opdrag-inspuiting gehad het soos in: +```yaml +on: pull_request_target +jobs: +just-printing-stuff: +runs-on: ubuntu-latest +if: ${ { github.actor == 'dependabot[bot]' }} +steps: +- run: echo ${ { github.event.pull_request.head.ref }} +``` +Wel, die oorspronklike blogpos stel twee opsies voor om hierdie gedrag te misbruik, waarvan die tweede is: + +- Fork die slagoffer se repository en stel Dependabot in met 'n verouderde afhanklikheid. +- Skep 'n nuwe tak met die kwaadwillige shell-inspuitkode. +- Verander die standaardtak van die repo na daardie een. +- Skep 'n PR van hierdie tak na die slagoffer se repository. +- Voer `@dependabot merge` uit in die PR wat Dependabot in sy fork geopen het. +- Dependabot sal sy veranderinge in die standaardtak van jou geforkte repository saamvoeg, wat die PR in die slagoffer se repository opdateer en nou die `dependabot[bot]` die akteur van die jongste gebeurtenis maak wat die werksvloei geaktiveer het en 'n kwaadwillige taknaam gebruik. + +### Kw vulnerable Derdeparty Github Actions #### [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) -Soos genoem in [**hierdie blogpos**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), laat hierdie Github Aksie toe om toegang tot artefakte van verskillende werksvloei en selfs repositories te verkry. +Soos genoem in [**hierdie blogpos**](https://www.legitsecurity.com/blog/github-actions-that-open-the-door-to-cicd-pipeline-attacks), stel hierdie Github Action toegang tot artefakte van verskillende werksvloei en selfs repositories moontlik. -Die probleem is dat as die **`path`** parameter nie gestel is nie, die artefak in die huidige gids uitgepak word en dit kan lêers oorskryf wat later in die werksvloei gebruik of selfs uitgevoer kan word. Daarom, as die Artefak kwesbaar is, kan 'n aanvaller dit misbruik om ander werksvloei wat die Artefak vertrou, te kompromitteer. +Die probleem is dat as die **`path`** parameter nie gestel is nie, die artefak in die huidige gids onttrek word en dit lêers kan oorskryf wat later gebruik of selfs in die werksvloei uitgevoer kan word. Daarom, as die Artefak kwesbaar is, kan 'n aanvaller dit misbruik om ander werksvloei te kompromitteer wat die Artefak vertrou. -Voorbeeld van kwesbare werksvloei: +Voorbeeld van 'n kwesbare werksvloei: ```yaml on: workflow_run: @@ -360,7 +410,7 @@ As ander repositories **afhang van hierdie gebruiker se repos**, sal 'n aanvalle ### Cache Poisoning -'n Cache word tussen **workflow-runs in dieselfde tak** gehandhaaf. Dit beteken dat as 'n aanvaller **kompromitteer** 'n **pakket** wat dan in die cache gestoor word en **afgelaai** en uitgevoer word deur 'n **meer bevoorregte** workflow, hy ook daardie workflow sal kan **kompromitteer**. +'n Cache word tussen **workflow-uitvoerings in dieselfde tak** gehandhaaf. Dit beteken dat as 'n aanvaller **kompromitteer** 'n **pakket** wat dan in die cache gestoor word en **afgelaai** en uitgevoer word deur 'n **meer bevoorregte** workflow, hy ook daardie workflow sal kan **kompromitteer**. {{#ref}} gh-actions-cache-poisoning.md @@ -398,7 +448,7 @@ As jy inhoud in 'n skrip inspuit, is dit interessant om te weet hoe jy toegang t
-Lys geheime in Github Action-uitset +Lys geheime in Github Action-uitvoer ```yaml name: list_env on: @@ -468,9 +518,9 @@ key: ${{ secrets.PUBLISH_KEY }} Die manier om te vind watter **Github Actions in nie-github infrastruktuur** uitgevoer word, is om te soek na **`runs-on: self-hosted`** in die Github Action konfigurasie yaml. -**Self-gehoste** lopers mag toegang hê tot **ekstra sensitiewe inligting**, na ander **netwerkstelsels** (kwesbare eindpunte in die netwerk? metadata diens?) of, selfs al is dit geïsoleer en vernietig, kan **meer as een aksie terselfdertyd uitgevoer word** en die kwaadwillige een kan die **geheime** van die ander steel. +**Self-gehoste** lopers mag toegang hê tot **ekstra sensitiewe inligting**, na ander **netwerkstelsels** (kwetsbare eindpunte in die netwerk? metadata diens?) of, selfs al is dit geïsoleer en vernietig, kan **meer as een aksie gelyktydig uitgevoer word** en die kwaadwillige een kan die **geheime** van die ander steel. -In self-gehoste lopers is dit ook moontlik om die **geheime van die \_Runner.Listener**\_\*\* proses\*\* te verkry, wat al die geheime van die werksvloei op enige stap sal bevat deur sy geheue te dump: +In self-gehoste lopers is dit ook moontlik om die **geheime van die \_Runner.Listener**\_\*\* proses\*\* te verkry wat al die geheime van die werksvloei op enige stap sal bevat deur sy geheue te dump: ```bash sudo apt-get install -y gdb sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ print $1 }')" @@ -479,7 +529,7 @@ Kontrollere [**hierdie pos vir meer inligting**](https://karimrahal.com/2023/01/ ### Github Docker Beeld Registrasie -Dit is moontlik om Github aksies te maak wat **'n Docker beeld binne Github bou en stoor**.\ +Dit is moontlik om Github aksies te maak wat **'n Docker beeld binne Github sal bou en stoor**.\ 'n Voorbeeld kan gevind word in die volgende uitbreidbare:
@@ -515,14 +565,14 @@ ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ e ```
-Soos wat jy in die vorige kode kon sien, is die Github registrasie gehost in **`ghcr.io`**. +Soos jy in die vorige kode kon sien, is die Github registrasie gehos in **`ghcr.io`**. -'n Gebruiker met leesregte oor die repo sal dan in staat wees om die Docker Image af te laai met 'n persoonlike toegangsteken: +'n Gebruiker met leesregte oor die repo sal dan in staat wees om die Docker Image af te laai met 'n persoonlike toegangstoken: ```bash echo $gh_token | docker login ghcr.io -u --password-stdin docker pull ghcr.io//: ``` -Dan kan die gebruiker **gelekte geheime in die Docker beeld lae soek:** +Then, the user could search for **leaked secrets in the Docker image layers:** {{#ref}} https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html @@ -530,24 +580,15 @@ https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forens ### Sensitiewe inligting in Github Actions logs -Selfs al probeer **Github** om **geheime waardes** in die aksies logs te **ontdek** en **te vermy om** hulle te wys, sal **ander sensitiewe data** wat in die uitvoering van die aksie gegenereer kon gewees het nie versteek wees nie. Byvoorbeeld, 'n JWT wat met 'n geheime waarde onderteken is, sal nie versteek wees nie tensy dit [spesifiek gekonfigureer](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret) is. +Selfs al probeer **Github** om **geheime waardes** in die aksies logs te **ontdek** en **te vermy** om hulle te wys, sal **ander sensitiewe data** wat in die uitvoering van die aksie gegenereer kon gewees het, nie versteek wees nie. Byvoorbeeld, 'n JWT wat met 'n geheime waarde onderteken is, sal nie versteek wees nie, tensy dit [spesifiek gekonfigureer is](https://github.com/actions/toolkit/tree/main/packages/core#setting-a-secret). ## Bedek jou Spore -(Tegniek van [**hier**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Eerstens, enige PR wat ingedien word, is duidelik sigbaar vir die publiek in Github en vir die teiken GitHub rekening. In GitHub kan ons **nie 'n PR van die internet verwyder** nie, maar daar is 'n draai. Vir GitHub rekeninge wat **gesuspend** is deur Github, word al hul **PRs outomaties verwyder** en van die internet verwyder. So om jou aktiwiteit te verberg, moet jy jou **GitHub rekening gesuspend of jou rekening geflag** kry. Dit sal **al jou aktiwiteite** op GitHub van die internet verberg (basies al jou eksploit PR verwyder) +(Tegniek van [**hier**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Eerstens, enige PR wat ingedien word, is duidelik sigbaar vir die publiek in Github en vir die teiken GitHub-rekening. In GitHub kan ons **nie 'n PR van die internet verwyder nie** nie, maar daar is 'n draai. Vir GitHub-rekeninge wat deur Github **gesuspend** is, word al hul **PRs outomaties verwyder** en van die internet verwyder. So om jou aktiwiteit te verberg, moet jy of jou **GitHub-rekening gesuspend kry of jou rekening gemerk kry**. Dit sal **al jou aktiwiteite** op GitHub van die internet verberg (basies al jou eksploit PR verwyder) -'n Organisasie in GitHub is baie proaktief in die verslagdoening van rekeninge aan GitHub. Alles wat jy moet doen, is om "iets" in 'n Issue te deel en hulle sal seker maak jou rekening word binne 12 uur gesuspend :p en daar het jy, jou eksploit op github onsigbaar gemaak. +'n Organisasie in GitHub is baie proaktief in die verslagdoening van rekeninge aan GitHub. Alles wat jy hoef te doen, is om “n paar goedere” in 'n Issue te deel en hulle sal seker maak jou rekening word binne 12 uur gesuspend :p en daar het jy, jou eksploit onsigbaar gemaak op github. > [!WARNING] -> Die enigste manier vir 'n organisasie om uit te vind dat hulle geteiken is, is om GitHub logs van SIEM te kontroleer, aangesien die PR van die GitHub UI verwyder sal word. - -## Gereedskap - -Die volgende gereedskap is nuttig om Github Action workflows te vind en selfs kwesbare te vind: - -- [https://github.com/CycodeLabs/raven](https://github.com/CycodeLabs/raven) -- [https://github.com/praetorian-inc/gato](https://github.com/praetorian-inc/gato) -- [https://github.com/AdnaneKhan/Gato-X](https://github.com/AdnaneKhan/Gato-X) -- [https://github.com/carlospolop/PurplePanda](https://github.com/carlospolop/PurplePanda) +> Die enigste manier vir 'n organisasie om uit te vind dat hulle geteiken is, is om GitHub logs van SIEM na te gaan, aangesien die PR van die GitHub UI verwyder sal word. {{#include ../../../banners/hacktricks-training.md}}