Github Security

Support HackTricks

Nini 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.

Taarifa za Msingi

Basic Github Information

Upelelezi wa Nje

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.

Iwapo unajua mtumiaji, repo au shirika unalotaka kulenga unaweza kutumia github dorks kupata taarifa nyeti au kutafuta mvuja 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.

Zana (kila zana ina orodha yake ya dorks):

Github Leaks

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

Zana (kila zana ina orodha yake ya regexes):

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

Forks za Nje

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

Github Leaks katika forks zilizofutwa/za ndani

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

Accessible Deleted Data in Github

Kuimarisha Shirika

Privileges za Wanachama

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

  • 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 kuto ruhusu wanachama kuvuta repos za shirika.

  • Uundaji wa kurasa: Ikiwa si lazima, ni bora kuto ruhusu wanachama kuchapisha kurasa kutoka kwa repos za shirika. Ikiwa ni lazima unaweza ruhusu kuunda kurasa za umma au binafsi.

  • Maombi ya ufikiaji wa ushirikiano: Kwa hili kuwezeshwa washiriki 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.

  • Sijapata taarifa hii katika majibu ya API, 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.

  • Sijapata taarifa hii katika majibu ya API, 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.

  • Sijapata taarifa hii katika majibu ya API, 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.

  • Sijapata taarifa hii katika majibu ya API, shiriki ikiwa unayo

  • Mambo mengine yanaweza kuwekewa mipangilio katika ukurasa huu lakini yale yaliyotangulia ndiyo yanayohusiana zaidi na usalama.

Mipangilio ya Vitendo

Mipangilio kadhaa zinazohusiana na usalama zinaweza kuwekwa kwa vitendo kutoka ukurasa https://github.com/organizations/<org_name>/settings/actions.

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

  • Sera za vitendo vya Github: Inaruhusu kuashiria ni repos zipi zinaweza kuendesha workflows na ni workflows zipi zinapaswa kuruhusiwa. Inapendekezwa kubainisha ni repos zipi zinapaswa kuruhusiwa na si kuruhusu vitendo vyote kuendesha.

  • Kuvuta ombi la pull request kutoka kwa washiriki wa nje: Inapendekezwa kuhitaji idhini kwa wote washiriki wa nje.

  • Sijapata 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 fork watapewa uwezo wa kutumia tokens zenye ruhusa za kusoma kwenye repo ya chanzo.

  • Sijapata API yenye taarifa hii, shiriki ikiwa unayo

  • Ruhusa za workflow: Inashauriwa sana kutoa ruhusa za kusoma tu za repo. Inashauriwa kutopewa ruhusa za kuandika na kuunda/kubali ombi la kuvuta ili kuepuka matumizi mabaya ya GITHUB_TOKEN inayotolewa kwa workflows zinazoendesha.

Ushirikiano

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).

Upelelezi & Mashambulizi yanayotumia akidi

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

Kwa kutumia Akidi za Mtumiaji

Iwapo kwa namna fulani tayari una akidi 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 kipimo hicho.

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

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

Kwa kutumia Funguo za SSH za Mtumiaji

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:

# 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 ya faragha uliyopata inaweza kutumika.

Funguo za SSH pia zinaweza 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 habari kuhusu funguo inayohusiana.

Funguo za GPG

Kama ilivyoelezwa hapa wakati mwingine inahitajika kusaini commits au unaweza kugundulika.

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

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 yenye uharibifu 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. Unapaswa kila wakati kuangalia mipaka iliyohitajika kabla ya kuikubali.

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

Kwa Programu ya Github

Kwa utangulizi kuhusu Programu za Github angalia taarifa za msingi.

Mshambuliaji anaweza kuunda Programu ya Github yenye uharibifu 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/repo/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 lililohifadhiwa.

  • Hitaji mapitio kutoka kwa Wamiliki wa Kanuni: Ikiwa hii imewashwa na wewe ni Mmiliki wa Kanuni, unaweza kufanya Github Action kuunda PR yako na kisha kuidhinisha mwenyewe.

  • Wakati faili ya CODEOWNER imepangwa vibaya Github hailalamiki 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.

  • PR Hijacking: 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 kuwa unalinda 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 unaposukumwa. Kwa kuwa ulinzi wa tawi hautalinda tawi hadi litakapoundwa, kusukuma msimbo huu wa kwanza kwenye tawi uta zindua github action.

Kupita Ulinzi wa Mazingira

Kwa utangulizi kuhusu Mazingira ya Github angalia taarifa za msingi.

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

Kumbuka, kwamba unaweza kupata hali ya mwisho ambapo matawi yote yamehifadhiwa (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.

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

Note that baada ya kuunda the branch the branch protection itatumika kwa tawi jipya and you won't be able to modify it, but for that time you will have already dumped the secrets.

Persistence

  • Generate token ya mtumiaji

  • Steal github tokens from secrets

  • Kuondoa workflow matokeo and branches

  • Give idhini zaidi kwa shirika lote

  • Create webhooks to exfiltrate information

  • Invite washirikishi wa nje

  • Ondoa webhooks used by the SIEM

  • Create/modify Github Action with a backdoor

  • Find Github Action iliyo hatarini kwa kuingiza amri via mabadiliko ya secret value

Imposter Commits - Backdoor via repo commits

In Github it's possible to create a PR to a repo from a fork. Even if the PR is haikubaliwi, a commit id inside the orginal repo is going to be created for the fork version of the code. Therefore, an attacker anaweza kuashiria kutumia commit maalum kutoka kwa repo inayonekana kuwa halali ambayo haikuzalishwa na mmiliki wa repo.

Like hii:

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

Support HackTricks

Last updated