Github Security

Reading time: 13 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

What is Github

(Kutoka hapa) Kwa kiwango cha juu, GitHub ni tovuti na huduma ya msingi wa wingu inayosaidia waendelezaji kuhifadhi na kusimamia msimbo wao, pamoja na kufuatilia na kudhibiti mabadiliko kwenye msimbo wao.

Basic Information

Basic Github Information

External Recon

Github repositories zinaweza kuwekwa kama za umma, binafsi na za ndani.

  • Binafsi inamaanisha kwamba tu watu wa taasisi wataweza kuzifikia
  • Za ndani inamaanisha kwamba tu watu wa biashara (biashara inaweza kuwa na mashirika kadhaa) wataweza kuzifikia
  • Umma inamaanisha kwamba mtandao wote utaweza kuzifikia.

Ikiwa unajua mtumiaji, repo au shirika unalotaka kulenga unaweza kutumia github dorks kupata taarifa nyeti au kutafuta mvuuko wa taarifa nyeti katika kila repo.

Github Dorks

Github inaruhusu kutafuta kitu kwa kubainisha kama upeo mtumiaji, repo au shirika. Hivyo, kwa orodha ya nyuzi ambazo zitakuwa karibu na taarifa nyeti unaweza kwa urahisi kutafuta taarifa nyeti zinazoweza kuwa katika lengo lako.

Tools (kila chombo kina orodha yake ya dorks):

Github Leaks

Tafadhali, kumbuka kwamba github dorks pia zinakusudia kutafuta mvuuko kwa kutumia chaguzi za utafutaji za github. Sehemu hii imejikita kwa zana hizo ambazo zitafanya kupakua kila repo na kutafuta taarifa nyeti ndani yao (hata kuangalia kina fulani cha commits).

Tools (kila chombo kina orodha yake ya regexes):

warning

Unapofanya utafutaji wa mvuuko katika repo na kuendesha kitu kama git log -p usisahau kuna matawi mengine yenye commits nyingine yanayohusisha siri!

External Forks

Inawezekana kudhoofisha repos kwa kutumia ombi la kuvuta. Ili kujua ikiwa repo ina udhaifu unahitaji kusoma sanaa za Github Actions yaml. Maelezo zaidi kuhusu hii hapa chini.

Github Leaks in deleted/internal forks

Hata kama zimefutwa au za ndani inaweza kuwa inawezekana kupata data nyeti kutoka kwa forks za github repositories. Angalia hapa:

Accessible Deleted Data in Github

Organization Hardening

Member Privileges

Kuna haki za msingi ambazo zinaweza kutolewa kwa wanachama wa shirika. Hizi zinaweza kudhibitiwa kutoka kwenye ukurasa https://github.com/organizations/<org_name>/settings/member_privileges au kutoka kwenye Organizations API.

  • Ruhusa za msingi: Wanachama watakuwa na ruhusa Hakuna/Soma/andika/Msimamizi juu ya repos za shirika. Inapendekezwa kuwa Hakuna au Soma.
  • Kuvuta repo: Ikiwa si lazima, ni bora kutokuruhusu wanachama kuvuta repos za shirika.
  • Uundaji wa kurasa: Ikiwa si lazima, ni bora kutokuruhusu wanachama kuchapisha kurasa kutoka kwa repos za shirika. Ikiwa ni lazima unaweza kuruhusu kuunda kurasa za umma au binafsi.
  • Maombi ya ufikiaji wa ushirikiano: Kwa hili kuwezeshwa washirikiano wa nje wataweza kuomba ufikiaji wa GitHub au programu za OAuth kufikia shirika hili na rasilimali zake. Kwa kawaida inahitajika, lakini ikiwa si hivyo, ni bora kuizima.
  • Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo
  • Mabadiliko ya mwonekano wa repo: Ikiwa imewezeshwa, wanachama wenye ruhusa za msimamizi kwa repo wataweza kubadilisha mwonekano wake. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaoweza kubadilisha mwonekano wa repos. Ikiwa hutaki watu kufanya mambo ya umma, hakikisha hii ime zimwa.
  • Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo
  • Futwa na uhamasishaji wa repo: Ikiwa imewezeshwa, wanachama wenye ruhusa za msimamizi kwa repo wataweza kufuta au kuhamasisha repos za umma na binafsi.
  • Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo
  • Ruhusu wanachama kuunda timu: Ikiwa imewezeshwa, mwanachama yeyote wa shirika ataweza kuunda timu mpya. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaoweza kuunda timu mpya. Ni bora kuwa na hii imezimwa.
  • Sikuweza kupata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo
  • Mambo mengine yanaweza kuwekewa mipangilio katika ukurasa huu lakini yale yaliyotangulia ndiyo yanayohusiana zaidi na usalama.

Actions Settings

Mipangilio kadhaa inayohusiana na usalama inaweza kuwekwa kwa ajili ya hatua kutoka kwenye ukurasa https://github.com/organizations/<org_name>/settings/actions.

note

Kumbuka kwamba mipangilio hii yote inaweza pia kuwekwa kwenye kila repo kwa kujitegemea

  • Sera za hatua za Github: Inaruhusu kuashiria ni repos zipi zinaweza kuendesha workflows na ni workflows zipi zinapaswa kuruhusiwa. Inapendekezwa kubainisha ni repos zipi zinapaswa kuruhusiwa na sio kuruhusu hatua zote kuendesha.
  • API-1, API-2
  • Kuvuta workflows za ombi kutoka kwa washirikiano wa nje: Inapendekezwa kuhitaji idhini kwa wote washirikiano wa nje.
  • Sikuweza kupata API yenye taarifa hii, shiriki ikiwa unayo
  • Kendesha workflows kutoka kwa ombi la kuvuta: Inashauriwa kutoendesha workflows kutoka kwa ombi la kuvuta kwani wasimamizi wa chanzo cha kuvuta watapewa uwezo wa kutumia tokens zenye ruhusa za kusoma kwenye repo ya chanzo.
  • Sikuweza kupata API yenye taarifa hii, shiriki ikiwa unayo
  • Ruhusa za workflow: Inashauriwa sana kutoa ruhusa za kusoma tu kwa repo. Inashauriwa kutopeana ruhusa za kuandika na kuunda/kubali ombi la kuvuta ili kuepuka matumizi mabaya ya GITHUB_TOKEN inayotolewa kwa workflows zinazokimbia.
  • API

Integrations

Nnijulishe ikiwa unajua kiunganishi cha API kufikia taarifa hii!

  • Sera ya ufikiaji wa programu za wahusika wengine: Inapendekezwa kupunguza ufikiaji kwa kila programu na kuruhusu zile tu zinazohitajika (baada ya kuzikagua).
  • Programu za GitHub zilizowekwa: Inapendekezwa kuruhusu zile tu zinazohitajika (baada ya kuzikagua).

Recon & Attacks abusing credentials

Kwa hali hii tutadhani kwamba umepata ufikiaji wa akaunti ya github.

With User Credentials

Ikiwa kwa namna fulani tayari una ruhusa za mtumiaji ndani ya shirika unaweza kuingia tu na kuangalia ni majukumu gani ya biashara na shirika ulionayo, ikiwa wewe ni mwanachama wa kawaida, angalia ni ruhusa zipi wanachama wa kawaida wanao, katika makundi gani ulipo, ni ruhusa zipi ulizonazo juu ya repos, na jinsi repos zinavyolindwa.

Kumbuka kwamba 2FA inaweza kutumika hivyo utaweza kufikia taarifa hii tu ikiwa unaweza pia kupita ukaguzi huo.

note

Kumbuka kwamba ikiwa utafanikiwa kuiba user_session cookie (sasa imewekwa na SameSite: Lax) unaweza kujifanya kuwa mtumiaji bila kuhitaji ruhusa au 2FA.

Angalia sehemu iliyo chini kuhusu kuvuka ulinzi wa matawi ikiwa itakuwa na manufaa.

With User SSH Key

Github inaruhusu watumiaji kuweka funguo za SSH ambazo zitakuwa zikitumika kama njia ya uthibitisho wa kupeleka msimbo kwa niaba yao (hakuna 2FA inatumika).

Kwa funguo hii unaweza kufanya mabadiliko katika repos ambapo mtumiaji ana baadhi ya ruhusa, hata hivyo huwezi kuitumia kufikia api ya github ili kuorodhesha mazingira. Hata hivyo, unaweza kupata kuorodhesha mipangilio ya ndani ili kupata taarifa kuhusu repos na mtumiaji ulionao ufikiaji:

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

Ikiwa mtumiaji ameweka jina lake la mtumiaji kama jina lake la github unaweza kufikia funguo za umma alizoweka katika akaunti yake kwenye https://github.com/<github_username>.keys, unaweza kuangalia hili kuthibitisha kuwa funguo binafsi ulizozipata zinaweza kutumika.

Funguo za SSH zinaweza pia kuwekwa katika hifadhi kama funguo za kutekeleza. Mtu yeyote mwenye ufikiaji wa funguo hii ataweza kuanzisha miradi kutoka kwenye hifadhi. Kawaida katika seva yenye funguo tofauti za kutekeleza, faili ya ndani ~/.ssh/config itakupa taarifa kuhusu funguo inayohusiana.

Funguo za GPG

Kama ilivyoelezwa hapa wakati mwingine inahitajika kusaini mabadiliko au unaweza kugunduliwa.

Angalia kwa ndani ikiwa mtumiaji wa sasa ana funguo yoyote kwa:

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

Kwa Token ya Mtumiaji

Kwa utangulizi kuhusu Token za Mtumiaji angalia taarifa za msingi.

Token ya mtumiaji inaweza kutumika badala ya nenosiri kwa Git kupitia HTTPS, au inaweza kutumika kujiandikisha kwenye API kupitia Uthibitishaji wa Msingi. Kulingana na mamlaka iliyounganishwa nayo unaweza kuwa na uwezo wa kufanya vitendo tofauti.

Token ya Mtumiaji inaonekana kama hii: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123

Kwa Programu ya Oauth

Kwa utangulizi kuhusu Programu za Oauth za Github angalia taarifa za msingi.

Mshambuliaji anaweza kuunda Programu ya Oauth mbaya ili kupata data/matendo ya kipaumbele ya watumiaji wanaokubali labda kama sehemu ya kampeni ya uvuvi.

Hizi ni mipaka ambayo programu ya Oauth inaweza kuomba. Ni lazima kila wakati kuangalia mipaka inayohitajika kabla ya kuzikubali.

Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, mashirika yanaweza kutoa/kukataa ufikiaji kwa programu za upande wa tatu kwa habari/repos/matendo yanayohusiana na shirika.

Kwa Programu ya Github

Kwa utangulizi kuhusu Programu za Github angalia taarifa za msingi.

Mshambuliaji anaweza kuunda Programu ya Github mbaya ili kupata data/matendo ya kipaumbele ya watumiaji wanaokubali labda kama sehemu ya kampeni ya uvuvi.

Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, mashirika yanaweza kutoa/kukataa ufikiaji kwa programu za upande wa tatu kwa habari/repos/matendo yanayohusiana na shirika.

Kuathiri & Kutumia Vibaya Github Action

Kuna mbinu kadhaa za kuathiri na kutumia vibaya Github Action, angalia hapa:

Abusing Github Actions

Kupita Ulinzi wa Tawi

  • Hitaji idadi ya idhini: Ikiwa umeathiri akaunti kadhaa unaweza tu kukubali PR zako kutoka kwa akaunti nyingine. Ikiwa una akaunti tu kutoka ambapo ulitengeneza PR huwezi kukubali PR yako mwenyewe. Hata hivyo, ikiwa una ufikiaji wa mazingira ya Github Action ndani ya repo, ukitumia GITHUB_TOKEN unaweza kuwa na uwezo wa kuidhinisha PR yako na kupata idhini 1 kwa njia hii.
  • Kumbuka kwa hili na kwa kizuizi cha Wamiliki wa Kanuni kwamba kwa kawaida mtumiaji hatakuwa na uwezo wa kuidhinisha PR zake mwenyewe, lakini ikiwa wewe ni, unaweza kuitumia vibaya kukubali PR zako.
  • Futa idhini wakati mabadiliko mapya yanaposhughulikiwa: Ikiwa hii haijakamilishwa, unaweza kuwasilisha msimbo halali, subiri hadi mtu apitishe, na kuweka msimbo mbaya na kuunganisha kwenye tawi lililolindwa.
  • Hitaji mapitio kutoka kwa Wamiliki wa Kanuni: Ikiwa hii imewezeshwa na wewe ni Mmiliki wa Kanuni, unaweza kufanya Github Action kuunda PR yako na kisha kuidhinisha mwenyewe.
  • Wakati faili ya CODEOWNER imepangwa vibaya Github haisemi chochote lakini haitatumia. Kwa hivyo, ikiwa imepangwa vibaya ulinzi wa Wamiliki wa Kanuni hauwezi kutumika.
  • Ruhusu wahusika maalum kupita mahitaji ya ombi la kuvuta: Ikiwa wewe ni mmoja wa wahusika hawa unaweza kupita ulinzi wa ombi la kuvuta.
  • Jumuisha wasimamizi: Ikiwa hii haijakamilishwa na wewe ni msimamizi wa repo, unaweza kupita ulinzi huu wa tawi.
  • Kuhujumu PR: Unaweza kuwa na uwezo wa kubadilisha PR ya mtu mwingine kwa kuongeza msimbo mbaya, kuidhinisha PR inayotokana na hiyo mwenyewe na kuunganisha kila kitu.
  • Kuondoa Ulinzi wa Tawi: Ikiwa wewe ni msimamizi wa repo unaweza kuzima ulinzi, kuunganisha PR yako na kuweka ulinzi tena.
  • Kupita ulinzi wa kusukuma: Ikiwa repo inaruhusu tu watumiaji fulani kutuma kusukuma (kuunganisha msimbo) katika matawi (ulinzi wa tawi unaweza kulinda matawi yote kwa kubainisha wildcard *).
  • Ikiwa una ufikiaji wa kuandika juu ya repo lakini hujapewa ruhusa ya kusukuma msimbo kwa sababu ya ulinzi wa tawi, bado unaweza kuunda tawi jipya na ndani yake kuunda github action inayozinduliwa wakati msimbo unasukumwa. Kwa kuwa ulinzi wa tawi hautalinda tawi hadi litengenezwe, kusukuma kwa msimbo huu wa kwanza kwenye tawi kut atekeleza github action.

Kupita Ulinzi wa Mazingira

Kwa utangulizi kuhusu Mazingira ya Github angalia taarifa za msingi.

Katika kesi mazingira yanaweza kupatikana kutoka matawi yote, hayalindwi na unaweza kwa urahisi kupata siri ndani ya mazingira. Kumbuka kwamba unaweza kupata repos ambapo matawi yote yanapewa ulinzi (kwa kubainisha majina yake au kwa kutumia *) katika hali hiyo, tafuta tawi ambapo unaweza kusukuma msimbo na unaweza kuondoa siri kwa kuunda github action mpya (au kubadilisha moja).

Kumbuka, kwamba unaweza kupata kesi ya mwisho ambapo matawi yote yanapewa ulinzi (kupitia wildcard *) imebainishwa nani anaweza kusukuma msimbo kwenye matawi (unaweza kubainisha hiyo katika ulinzi wa tawi) na mtumiaji wako hauruhusiwi. Bado unaweza kuendesha github action maalum kwa sababu unaweza kuunda tawi na kutumia kichocheo cha kusukuma juu yake mwenyewe. Ulinzi wa tawi unaruhusu kusukuma kwenye tawi jipya hivyo github action itazinduliwa.

yaml
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

Kumbuka kwamba baada ya kuunda tawi, ulinzi wa tawi utaweza kutumika kwa tawi jipya na huwezi kulibadilisha, lakini kwa wakati huo tayari utakuwa umepata siri hizo.

Kudumu

  • Tengeneza token ya mtumiaji
  • Nyakua token za github kutoka siri
  • Kuondoa matokeo ya workflow na matawi
  • Toa idhini zaidi kwa shirika lote
  • Unda webhooks za kuhamasisha taarifa
  • Karibisha washirikishi wa nje
  • Ondoa webhooks zinazotumiwa na SIEM
  • Unda/badilisha Github Action yenye mlango wa nyuma
  • Pata Github Action iliyo hatarini kwa kuingiza amri kupitia mabadiliko ya thamani ya siri

Imposter Commits - Mlango wa nyuma kupitia commits za repo

Katika Github inawezekana kuunda PR kwa repo kutoka kwa fork. Hata kama PR haikubaliwi, commit id ndani ya repo asilia itaundwa kwa toleo la fork la msimbo. Hivyo, mshambuliaji anaweza kuunganisha kutumia commit maalum kutoka kwa repo inayodhaniwa kuwa halali ambayo haikuundwa na mmiliki wa repo.

Kama hii:

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

Kwa maelezo zaidi angalia https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks