Github Security

Leer AWS hak van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Wat is Github

(Van hier) Op 'n hoë vlak is GitHub 'n webwerf en wolkgebaseerde diens wat ontwikkelaars help om hul kode te stoor en te bestuur, sowel as om veranderinge aan hul kode te monitor en te beheer.

Basiese Inligting

pageBasic Github Information

Eksterne Verkenning

Github-opberging kan ingestel word as openbaar, privaat en intern.

  • Privaat beteken dat slegs mense van die organisasie dit kan benader

  • Intern beteken dat slegs mense van die onderneming (‘n onderneming kan verskeie organisasies hê) dit kan benader

  • Openbaar beteken dat die hele internet dit kan benader.

In die geval dat jy die gebruiker, opberging of organisasie wat jy wil teiken ken, kan jy github dorks gebruik om sensitiewe inligting te vind of te soek na sensitiewe inligtingslekke op elke opberging.

Github Dorks

Github maak dit moontlik om te soek vir iets deur ‘n gebruiker, ‘n opberging of ‘n organisasie as omvang te spesifiseer. Daarom kan jy maklik soek vir potensiële sensitiewe inligting in jou teiken met ‘n lys snare wat naby sensitiewe inligting gaan verskyn.

Hulpmiddels (elke hulpmiddel bevat sy lys dorks):

Github Lekke

Let asseblief daarop dat die github dorks ook bedoel is om te soek na lekke deur gebruik te maak van github soekopsies. Hierdie afdeling is toegewy aan daardie hulpmiddels wat elke opberging sal aflaai en soek vir sensitiewe inligting daarin (selfs deur sekere diepte van commits te ondersoek).

Hulpmiddels (elke hulpmiddel bevat sy lys regexes):

Wanneer jy vir lekke in ‘n opberging soek en iets soos git log -p hardloop, moenie vergeet dat daar dalk ander takke met ander commits is wat geheime bevat nie!

Eksterne Forks

Dit is moontlik om opberginge te kompromitteer deur gebruik te maak van pull-aanvrae. Om te weet of ‘n opberging kwesbaar is, moet jy meestal die Github Actions yaml-konfigurasies lees. Meer inligting hieroor hieronder.

Organisasie Versterking

Lid Voorregte

Daar is sekere standaard voorregte wat aan lede van die organisasie toegewys kan word. Dit kan beheer word vanaf die bladsy https://github.com/organizations/<org_naam>/settings/member_privileges of vanaf die Organisasies API.

  • Basiese toestemmings: Lede sal die toestemming Geen/Lees/skryf/Admin hê oor die organisasie-opberginge. Dit word aanbeveel om Geen of Lees te gebruik.

  • Opberging vurk: Indien nie nodig nie, is dit beter om lede nie toe te laat om organisasie-opberginge te vurk nie.

  • Bladsye skepping: Indien nie nodig nie, is dit beter om lede nie toe te laat om bladsye van die organisasie-opberginge te publiseer nie. Indien nodig kan jy toelaat om openbare of private bladsye te skep.

  • Integrasie toegangsversoeke: Met hierdie funksie sal buite medewerkers in staat wees om toegang te versoek vir GitHub of OAuth-toepassings om toegang tot hierdie organisasie en sy bronne te verkry. Dit is gewoonlik nodig, maar indien nie, is dit beter om dit te deaktiveer.

  • Ek kon nie hierdie inligting in die API se respons vind nie, deel as jy dit doen

  • Opberging sigbaarheidsverandering: Indien geaktiveer, sal lede met admin toestemmings vir die opberging in staat wees om die sigbaarheid daarvan te verander. Indien gedeaktiveer, kan slegs organisasie-eienaars opberging sigbaarhede verander. As jy nie wil hê dat mense dinge publiek maak nie, maak seker dit is gedeaktiveer.

  • Ek kon nie hierdie inligting in die API se respons vind nie, deel as jy dit doen

  • Opberging verwydering en oordrag: Indien geaktiveer, sal lede met admin toestemmings vir die opberging in staat wees om openbare en private opberginge te verwyder of oor te dra.

  • Ek kon nie hierdie inligting in die API se respons vind nie, deel as jy dit doen

  • Laat lede toe om spanne te skep: Indien geaktiveer, sal enige lid van die organisasie in staat wees om nuwe spanne te skep. Indien gedeaktiveer, kan slegs organisasie-eienaars nuwe spanne skep. Dit is beter om dit gedeaktiveer te hê.

  • Ek kon nie hierdie inligting in die API se respons vind nie, deel as jy dit doen

  • Meer dinge kan gekonfigureer word op hierdie bladsy, maar die vorige is diegene wat meer op sekuriteit gerig is.

Aksies Instellings

Verskeie sekuriteitverwante instellings kan gekonfigureer word vir aksies vanaf die bladsy https://github.com/organizations/<org_naam>/settings/actions.

Let daarop dat al hierdie konfigurasies ook op elke opberging onafhanklik ingestel kan word

  • Github aksies beleide: Dit maak dit moontlik om aan te dui watter opberginge werkvloei kan hardloop en watter werkvloei toegelaat moet word. Dit word aanbeveel om te spesifiseer watter opberginge toegelaat moet word en nie alle aksies toe te laat om te hardloop nie.

  • Vurk trek aanvraag werkvloei van buite medewerkers: Dit word aanbeveel om goedkeuring vir alle buite medewerkers te vereis.

  • Ek kon nie ‘n API met hierdie inligting vind nie, deel as jy dit doen

  • Hardloop werkvloei van vurk trek aanvrae: Dit word sterk afgeraai om werkvloei vanaf aanvrae te hardloop aangesien onderhouers van die vurk oorsprong die vermoë sal kry om tokens met leesregte op die bronopberging te gebruik.

  • Ek kon nie ‘n API met hierdie inligting vind nie, deel as jy dit doen

  • Werkvloei toestemmings: Dit word sterk aanbeveel om slegs leesopbergingstoestemmings te gee. Dit word afgeraai om skryf- en skep/goedkeur aanvraag toestemmings te gee om misbruik van die GITHUB_TOKEN wat aan hardloopwerkvloei gegee word, te voorkom.

Integrasies

Laat weet my as jy die API-eindpunt ken om hierdie inligting te benader!

  • Beleid vir toegang tot derdeparty-toepassings: Dit word aanbeveel om die toegang tot elke toepassing te beperk en slegs die nodige toe te laat (nadat hulle hersien is).

  • Geïnstalleerde GitHub-toepassings: Dit word aanbeveel om slegs die nodige toe te laat (nadat hulle hersien is).

Verkenning & Aanvalle wat geloofsbriewe misbruik

Vir hierdie scenario gaan ons aanneem dat jy toegang tot 'n GitHub-rekening verkry het.

Met Gebruikersgelde

As jy op een of ander manier al gelde vir 'n gebruiker binne 'n organisasie het, kan jy net inlog en kyk watter ondernemings- en organisasierolle jy het, as jy 'n gewone lid is, kyk watter regte gewone lede het, in watter groepe jy is, watter regte jy het oor watter opberging, en hoe die opberging beskerm is.

Merk op dat 2FA gebruik kan word, sodat jy hierdie inligting slegs kan benader as jy ook daardie toets kan slaag.

Merk op dat as jy daarin slaag om die user_session-koekie te steel (tans gekonfigureer met SameSite: Laks) jy die gebruiker heeltemal kan naboots sonder om gelde of 2FA nodig te hê.

Kyk na die afdeling hieronder oor takbeskermingsontduiking in geval dit nuttig is.

Met Gebruikers SSH-sleutel

Github laat gebruikers toe om SSH-sleutels in te stel wat as verifikasiemetode vir kode-ontplooiing namens hulle gebruik sal word (geen 2FA word toegepas nie).

Met hierdie sleutel kan jy veranderinge in opberginge waar die gebruiker sekere regte het, uitvoer, maar jy kan dit nie gebruik om toegang tot die github-api te kry om die omgewing op te som nie. Jy kan egter lokale instellings opnoem om inligting oor die opberginge en gebruiker waar jy toegang tot het, te kry:

# Go to the the repository folder
# Get repo config and current user name and email
git config --list

Indien die gebruiker sy gebruikersnaam ingestel het as sy github gebruikersnaam kan jy die openbare sleutels wat hy ingestel het in sy rekening by https://github.com/<github_gebruikersnaam>.keys toegang, jy kan dit nagaan om te bevestig dat die privaatsleutel wat jy gevind het, gebruik kan word.

SSH-sleutels kan ook in bewaarplekke as implementeringsleutels ingestel word. Iemand met toegang tot hierdie sleutel sal in staat wees om projekte van 'n bewaarplek te begin. Gewoonlik sal 'n bediener met verskillende implementeringsleutels jou inligting gee oor watter sleutel verband hou in die plaaslike lêer ~/.ssh/config.

GPG-sleutels

Soos verduidelik hier is dit soms nodig om die toewysings te teken of jy mag dalk ontdek word.

Kyk plaaslik of die huidige gebruiker enige sleutel het met:

gpg --list-secret-keys --keyid-format=long

Met Gebruiker Token

Vir 'n inleiding oor Gebruikerstokens, sien die basiese inligting.

'n Gebruikerstoken kan gebruik word in plaas van 'n wagwoord vir Git oor HTTPS, of kan gebruik word om te outentiseer na die API oor Basiese Outentisering. Afhangende van die voorregte wat daaraan verbind is, kan jy verskillende aksies uitvoer.

'n Gebruikerstoken lyk soos dit: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123

Met Oauth-aansoek

Vir 'n inleiding oor Github Oauth-aansoeke, sien die basiese inligting.

'n Aanvaller kan 'n skadelike Oauth-aansoek skep om toegang te verkry tot bevoorregte data/aksies van die gebruikers wat hulle waarskynlik aanvaar as deel van 'n hengelveldtog.

Dit is die omvang wat 'n Oauth-aansoek kan aanvra. 'n Mens moet altyd die aangevraagde omvangte nagaan voordat jy dit aanvaar.

Verder, soos verduidelik in die basiese inligting, kan organisasies toegang tot derdeparty-aansoeke gee/weier tot inligting/repos/aksies wat verband hou met die organisasie.

Met Github-aansoek

Vir 'n inleiding oor Github-aansoeke, sien die basiese inligting.

'n Aanvaller kan 'n skadelike Github-aansoek skep om toegang te verkry tot bevoorregte data/aksies van die gebruikers wat hulle waarskynlik aanvaar as deel van 'n hengelveldtog.

Verder, soos verduidelik in die basiese inligting, kan organisasies toegang tot derdeparty-aansoeke gee/weier tot inligting/repos/aksies wat verband hou met die organisasie.

Kompromieer & Misbruik Github Aksie

Daar is verskeie tegnieke om 'n Github Aksie te kompromiteer en te misbruik, kyk hier:

pageAbusing Github Actions

Takbeskerming Verbygaan

  • Vereis 'n aantal goedkeurings: As jy verskeie rekeninge gekompromiteer het, kan jy net jou PR's van ander rekeninge aanvaar. As jy net die rekening het waarvandaan jy die PR geskep het, kan jy nie jou eie PR aanvaar nie. Tog, as jy toegang het tot 'n Github Aksie-omgewing binne die repo, deur die GITHUB_TOKEN te gebruik, kan jy dalk jou PR goedkeur en sodoende 1 goedkeuring kry.

  • Nota vir hierdie en vir die Kode-Eienaarsbeperking dat 'n gebruiker gewoonlik nie sy eie PR's kan goedkeur nie, maar as jy dit kan, kan jy dit misbruik om jou PR's te aanvaar.

  • Verwerp goedkeurings wanneer nuwe commits gedruk word: As dit nie ingestel is nie, kan jy legitieme kode indien, wag tot iemand dit goedkeur, en skadelike kode invoeg en dit in die beskermde tak saamvoeg.

  • Vereis resensies van Kode-Eienaars: As dit geaktiveer is en jy 'n Kode-Eienaar is, kan jy 'n Github Aksie jou PR laat skep en dan dit self goedkeur.

  • Wanneer 'n KODEEIENAAR-lêer verkeerd geconfigureer is, kla Github nie daaroor nie, maar gebruik dit nie. Daarom, as dit verkeerd geconfigureer is, word sy Kode-Eienaarsbeskerming nie toegepas nie.

  • Laat gespesifiseerde akteurs toe om aanvraagvereistes vir trek te verbygaan: As jy een van hierdie akteurs is, kan jy trekvereistes vir aanvraag verbygaan.

  • Sluit administrateurs in: As dit nie ingestel is nie en jy is 'n admin van die repo, kan jy hierdie takbeskerming verbygaan.

  • PR-ontvoering: Jy kan dalk die PR van iemand anders wysig deur skadelike kode by te voeg, die resulterende PR self goed te keur en alles saam te voeg.

  • Takbeskermings verwyder: As jy 'n admin van die repo is, kan jy die beskermings uitskakel, jou PR saamvoeg en die beskermings weer instel.

  • Verbygaan van drukbeskermings: As 'n repo slegs sekere gebruikers toelaat om kode te druk (saamvoeg) in takke (die takbeskerming kan al die takke beskerm deur die wildkaart * te spesifiseer).

  • As jy skryftoegang tot die repo het, maar nie toegelaat word om kode te druk nie as gevolg van die takbeskerming, kan jy steeds 'n nuwe tak skep en binne dit 'n github aksie skep wat geaktiveer word wanneer kode gedruk word. Aangesien die takbeskerming die tak nie sal beskerm totdat dit geskep is nie, sal hierdie eerste kode-indruk na die tak die github aksie uitvoer.

Verbygaan van Omgewingsbeskerming

Vir 'n inleiding oor Github-omgewings, sien die basiese inligting.

In die geval dat 'n omgewing vanaf alle takke toeganklik is, is dit nie beskerm nie en kan jy maklik die geheime binne die omgewing bereik. Let daarop dat jy dalk repos kan vind waar alle takke beskerm is (deur hul name te spesifiseer of deur * te gebruik) in daardie scenario, vind 'n tak waar jy kode kan druk en jy kan die geheime uitdra deur 'n nuwe github aksie te skep (of een te wysig).

Let daarop dat jy die uitsonderlike geval kan vind waar alle takke beskerm is (via wildkaart *) en daar gespesifiseer is wie kode na die takke kan druk (jy kan dit spesifiseer in die takbeskerming) en jou gebruiker nie toegelaat word nie. Jy kan steeds 'n aangepaste github aksie hardloop omdat jy 'n tak kan skep en die druktreffer oor homself kan gebruik. Die takbeskerming laat die druk na 'n nuwe tak toe sodat die github aksie geaktiveer sal word.

push: # Run it when a push is made to a branch
branches:
- current_branch_name #Use '**' to run when a push is made to any branch

Merk op dat nadat die tak geskep is, die takbeskerming sal van toepassing wees op die nuwe tak en jy sal dit nie kan wysig nie, maar teen daardie tyd sal jy reeds die geheime uitgelek het.

Volharding

  • Genereer gebruikerstoken

  • Steel github-tokens van geheime

  • Verwydering van werkstroom resultate en takke

  • Gee meer toestemmings aan almal in die organisasie

  • Skep webhooks om inligting uit te sif

  • Nooi buitestaande medewerkers

  • Verwyder webhooks wat deur die SIEM gebruik word

  • Skep/wysig Github-handeling met 'n agterdeur

  • Vind kwesbare Github-handeling vir bevelinspuiting via geheime-waarde-wysiging

Imposter Commits - Agterdeur via repo commits

In Github is dit moontlik om 'n PR na 'n repo van 'n fork te skep. Selfs as die PR nie aanvaar word nie, gaan 'n commit-id binne die oorspronklike repo geskep word vir die fork-weergawe van die kode. Daarom kan 'n aanvaller pin om 'n spesifieke commit te gebruik van 'n skynbaar legitieme repo wat nie deur die eienaar van die repo geskep is nie.

Soos hierdie:

name: example
on: [push]
jobs:
commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e
- shell: bash
run: |
echo 'hello world!'

Vir meer inligting kyk na https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd

Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated