Github Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
(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.
Github repositories zinaweza kuwekwa kama za umma, binafsi na za ndani.
Binafsi inamaanisha kwamba tu watu wa shirika wataweza kuzifikia
Za ndani inamaanisha kwamba tu watu wa biashara (biashara inaweza kuwa na mashirika kadhaa) wataweza kuzifikia
Uwazi inamaanisha kwamba mtandao wote utaweza kuzifikia.
Iwapo unajua mtumiaji, repo au shirika unalotaka kulenga unaweza kutumia github dorks kupata taarifa nyeti au kutafuta mvuja taarifa nyeti katika kila repo.
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):
Tafadhali, kumbuka kwamba github dorks pia zinakusudia kutafuta mvuja taarifa 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):
Unapofanya utafutaji wa mvuja taarifa katika repo na kuendesha kitu kama git log -p
usisahau kuna matawi mengine yenye commits nyingine yanayoweza kuwa na siri!
Inawezekana kudhoofisha repos kwa kutumia ombi la kuvuta. Ili kujua ikiwa repo ina udhaifu unahitaji kusoma sana mipangilio ya yaml za Github Actions. Maelezo zaidi kuhusu hii hapa chini.
Hata kama zimefutwa au za ndani inaweza kuwa inawezekana kupata data nyeti kutoka kwa forks za github repositories. Angalia hapa:
Kuna privileges 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 likiwa limewezeshwa 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.
Sijapata 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.
Sijapata taarifa hii katika majibu ya APIs, shiriki ikiwa unayo
Futio na uhamisho 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 APIs, shiriki ikiwa unayo
Ruhusu wanachama kuunda timu: Ikiwa imewezeshwa, mwanachama yeyote wa shirika atakuwa na uwezo wa 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 APIs, shiriki ikiwa unayo
Mambo mengine yanaweza kuwekewa mipangilio katika ukurasa huu lakini yale yaliyotangulia ndiyo yanayohusiana zaidi na usalama.
Mipangilio kadhaa inayohusiana na usalama inaweza kuwekwa kwa ajili ya hatua kutoka kwenye ukurasa https://github.com/organizations/<org_name>/settings/actions
.
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 si kuruhusu hatua zote kuendesha.
Kuvuta ombi la pull request kutoka kwa washirikiano wa nje: Inapendekezwa kuhitaji idhini kwa wote washirikiano 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 kwa repo. Inashauriwa kutopeana ruhusa za kuandika na kuunda/kubali ombi la kuvuta ili kuepuka matumizi mabaya ya GITHUB_TOKEN inayotolewa kwa workflows zinazoendesha.
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 tu zile zinazohitajika (baada ya kuzikagua).
Programu za GitHub zilizowekwa: Inapendekezwa kuruhusu tu zile zinazohitajika (baada ya kuzikagua).
Kwa hali hii tutadhani kwamba umepata ufikiaji wa akaunti ya github.
Iwapo 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, ni 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 ruhusa au 2FA.
Angalia sehemu iliyo chini kuhusu kuvunjika kwa ulinzi wa matawi ikiwa itakuwa na manufaa.
Github inaruhusu watumiaji kuweka SSH keys ambazo zitakuwa zikitumika kama njia ya uthibitisho wa kupeleka msimbo kwa niaba yao (hakuna 2FA inayotumika).
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:
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 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 taarifa kuhusu funguo inayohusiana.
Kama ilivyoelezwa hapa wakati mwingine inahitajika kusaini commits au unaweza kugundulika.
Angalia kwa ndani ikiwa mtumiaji wa sasa ana funguo yoyote kwa:
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 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 udukuzi.
Hizi ni mipaka ambayo programu ya Oauth inaweza kuomba. Unapaswa kila wakati kuangalia mipaka inayohitajika 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 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 udukuzi.
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.
Kuna mbinu kadhaa za kuathiri na kutumia vibaya Github Action, angalia hapa:
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 watumiaji fulani tu 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 liundwe, kusukuma kwa msimbo huu wa kwanza kwenye tawi litazindua github action.
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 hajaruhusiwa. 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.
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.
Generate token ya mtumiaji
Steal github tokens from secrets
Kuondoa matokeo ya workflow na matawi
Give idhini zaidi kwa shirika lote
Create webhooks to exfiltrate information
Invite washirikishi wa nje
Ondoa webhooks zilizotumika na SIEM
Create/modify Github Action with a backdoor
Find Github Action iliyo hatarini kwa kuingiza amri via mabadiliko ya secret value
In Github it's possible to create a PR to a repo from a fork. Even if the PR is not accepted, a commit id inside the orginal repo is going to be created for the fork version of the code. Therefore, an attacker could pin to use an specific commit from an apparently ligit repo that wasn't created by the owner of the repo.
Like hii:
Kwa maelezo zaidi angalia https://www.chainguard.dev/unchained/what-the-fork-imposter-commits-in-github-actions-and-ci-cd
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)