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
Za umma inamaanisha kwamba mtandao wote utaweza kuzifikia.
Iwapo unajua mtumiaji, repo au shirika unalotaka kulenga unaweza kutumia github dorks kupata taarifa nyeti au kutafuta mvuuko wa 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 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):
Unapofanya utafutaji wa mvuuko 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 ni hatarishi unahitaji zaidi kusoma mipangilio ya yaml ya 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:
Accessible Deleted Data in GithubKuna 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 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: Ikiwa hii imewezeshwa 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 ataweza kuunda timu mpya. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaoweza kuunda timu mpya. Ni bora kuwa 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 gani zinaweza kuendesha workflows na ni workflows zipi zinapaswa kuruhusiwa. Inapendekezwa kubainisha ni repos gani zinapaswa kuruhusiwa na si kuruhusu hatua zote kuendesha.
Kuvuta ombi la workflow 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 kuvuta 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 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 wanazo, 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 kuvuka ulinzi wa matawi ikiwa itakuwa na manufaa.
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:
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 hii 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/hatua za kipaumbele za 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/hatua zinazohusiana na shirika.
Kwa utangulizi kuhusu Programu za Github angalia taarifa za msingi.
Mshambuliaji anaweza kuunda Programu ya Github yenye uharibifu ili kupata data/hatua za kipaumbele za 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/hatua zinazohusiana na shirika.
Kuna mbinu kadhaa za kuathiri na kutumia vibaya Hatua za Github, angalia hapa:
Abusing Github ActionsHitaji idadi ya idhini: Ikiwa umeathiri akaunti kadhaa unaweza tu kukubali PR zako kutoka kwa akaunti nyingine. Ikiwa una akaunti tu kutoka ambapo ulitunga PR huwezi kukubali PR yako mwenyewe. Hata hivyo, ikiwa una ufikiaji wa mazingira ya Hatua za Github 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 yanapowekwa: 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 imewashwa na wewe ni Mmiliki wa Kanuni, unaweza kufanya Hatua ya Github 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.
Hijacking ya PR: Unaweza kuwa na uwezo wa kubadilisha PR ya mtu mwingine kwa kuongeza msimbo mbaya, kuidhinisha PR inayotokana 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 hatua ya github inayozinduliwa wakati msimbo unasukumwa. Kwa kuwa ulinzi wa tawi hautalinda tawi hadi liundwe, kusukuma kwa msimbo wa kwanza kwenye tawi hili kutatekeleza hatua ya github.
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 repos ambapo matawi yote yamekulindwa (kwa kubainisha majina yake au kwa kutumia *
) katika hali hiyo, pata tawi ambapo unaweza kusukuma msimbo na unaweza kuondoa siri kwa kuunda hatua mpya ya github (au kubadilisha moja).
Kumbuka, kwamba unaweza kupata kesi ya ukingo ambapo matawi yote yamekulindwa (kupitia wildcard *
) imebainishwa nani anaweza kusukuma msimbo kwenye matawi (unaweza kubainisha hiyo katika ulinzi wa tawi) na mtumiaji wako hajaruhusiwa. Bado unaweza kuendesha hatua maalum ya github kwa sababu unaweza kuunda tawi na kutumia kichocheo cha kusukuma juu yake mwenyewe. Ulinzi wa tawi unaruhusu kusukuma kwenye tawi jipya hivyo hatua ya github itazinduliwa.
Note that baada ya kuunda the branch the branch protection itatumika kwa branch mpya and you won't be able to modify it, but for that time you will have already dumped the secrets.
Generate user token
Steal github tokens from secrets
Deletion of workflow results and branches
Give more permissions to all the org
Create webhooks to exfiltrate information
Invite outside collaborators
Remove webhooks used by the SIEM
Create/modify Github Action with a backdoor
Find vulnerable Github Action to command injection via secret value modification
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)