Github Security

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Github Ni Nini

(Kutoka hapa) Kwa kiwango cha juu, GitHub ni tovuti na huduma inayotegemea wingu inayosaidia watengenezaji kuhifadhi na kusimamia nambari zao, pamoja na kufuatilia na kudhibiti mabadiliko kwenye nambari zao.

Taarifa Msingi

pageBasic Github Information

Uchunguzi wa Nje

Maktaba za Github zinaweza kusanidiwa kama za umma, za kibinafsi na za ndani.

  • Binafsi inamaanisha kwamba watu tu wa shirika wataweza kuzifikia

  • Ndani inamaanisha kwamba watoto wa kampuni (kampuni inaweza kuwa na mashirika kadhaa) pekee wataweza kuzifikia

  • Umma inamaanisha kwamba mtandao wote utaweza kuzifikia.

Ikiwa unajua mtumiaji, repo au shirika unalotaka kulenga unaweza kutumia github dorks kupata habari nyeti au kutafuta mifumo ya habari nyeti kwenye kila repo.

Github Dorks

Github inaruhusu kutafuta kitu kwa kufafanua kama eneo mtumiaji, repo au shirika. Kwa hivyo, kwa orodha ya maneno ambayo yataonekana karibu na habari nyeti unaweza kwa urahisi kutafuta habari nyeti inayowezekana kwenye lengo lako.

Zana (kila zana ina orodha yake ya dorks):

Vujaji wa Github

Tafadhali, kumbuka kuwa github dorks pia inalenga kutafuta vujaji kwa kutumia chaguzi za utaftaji wa github. Sehemu hii imejitolea kwa zana hizo ambazo zitapakua kila repo na kutafuta habari nyeti ndani yake (hata kuchunguza kina fulani cha commits).

Zana (kila zana ina orodha yake ya regexes):

Unapotafuta vujaji kwenye repo na kufanya kitu kama git log -p usisahau kwamba kunaweza kuwa na vijitawi vingine na commits vingine vinavyoleta siri!

Vichwa vya Nje

Inawezekana kudhoofisha repos kwa kutumia maombi ya kuvuta. Ili kujua ikiwa repo ni dhaifu kwa kawaida unahitaji kusoma mizani ya yaml ya Github Actions. Maelezo zaidi kuhusu hili hapa chini.

Kufanya Shirika Kuwa Imara

Haki za Wanachama

Kuna haki 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 kwa API za Mashirika.

  • Ruhusa za msingi: Wanachama watapata ruhusa None/Read/write/Admin kwenye maktaba za shirika. Inapendekezwa ni Hakuna au Soma.

  • Kuforka maktaba: Ikiwa sio lazima, ni bora kutoruhusu wanachama kuforka maktaba za shirika.

  • Uundaji wa kurasa: Ikiwa sio lazima, ni bora kutoruhusu wanachama kuchapisha kurasa kutoka kwa maktaba za shirika. Ikiwa ni lazima unaweza kuruhusu kuunda kurasa za umma au za kibinafsi.

  • Maombi ya ufikiaji wa Ushirikiano: Ikiwa hii imezimwa, washirika wa nje wataweza kuomba ufikiaji kwa programu za GitHub au OAuth kufikia shirika hili na rasilimali zake. Mara nyingi inahitajika, lakini ikiwa sivyo, ni bora kuzima.

  • Sikupata habari hii kwenye majibu ya APIs, shiriki ikiwa unayo

  • Mabadiliko ya uonekano wa maktaba: Ikiwa imewezeshwa, wanachama wenye ruhusa za admin kwa maktaba wataweza kubadilisha uonekano wake. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaweza kubadilisha uonekanaji wa maktaba. Ikiwa hautaki watu kufanya mambo kuwa ya umma, hakikisha hii imezimwa.

  • Sikupata habari hii kwenye majibu ya APIs, shiriki ikiwa unayo

  • Kufuta na Kuhamisha Maktaba: Ikiwa imewezeshwa, wanachama wenye ruhusa za admin kwa maktaba wataweza kufuta au kuhamisha maktaba za umma na za kibinafsi.

  • Sikupata habari hii kwenye majibu ya APIs, shiriki ikiwa unayo

  • Kuruhusu wanachama kuunda timu: Ikiwa imewezeshwa, mwanachama yeyote wa shirika ataweza kuunda timu mpya. Ikiwa imezimwa, ni wamiliki wa shirika pekee wanaweza kuunda timu mpya. Ni bora kuwa na hii imezimwa.

  • Sikupata habari hii kwenye majibu ya APIs, shiriki ikiwa unayo

  • Vitu zaidi vinaweza kusanidiwa kwenye ukurasa huu lakini yale yaliyotangulia ni yale yanayohusiana zaidi na usalama.

Mipangilio ya Vitendo

Mipangilio kadhaa inayohusiana na usalama inaweza kusanidiwa kwa vitendo kutoka kwa ukurasa https://github.com/organizations/<org_name>/settings/actions.

Tambua kuwa mipangilio yote hii inaweza pia kuwekwa kwa kila maktaba kivyake

  • Sera za vitendo vya Github: Inakuruhusu kuonyesha ni maktaba zipi zinaweza kutekeleza mifumo ya kazi na ni mifumo gani inapaswa kuruhusiwa. Inapendekezwa kutaja ni maktaba zipi zinapaswa kuruhusiwa na kutokuruhusu vitendo vyote viendelee.

  • Mifumo ya kazi ya maombi ya kuvuta kutoka kwa washirika wa nje: Inapendekezwa kuhitaji idhini kwa wote washirika wa nje.

  • Sikupata API na habari hii, shiriki ikiwa unayo

  • Tekeleza mifumo ya kazi kutoka kwa maombi ya kuvuta: Inapendekezwa sana kutotekeleza mifumo ya kazi kutoka kwa maombi ya kuvuta kwani watunzaji wa asili ya kuvuta watapewa uwezo wa kutumia vivuli vyenye ruhusa ya kusoma kwenye maktaba ya asili.

  • Sikupata API na habari hii, shiriki ikiwa unayo

  • Ruhusa za mifumo ya kazi: Inapendekezwa sana kutoa ruhusa za kusoma maktaba tu. Inapendekezwa kutokupa ruhusa za kuandika na kuunda/idhinisha maombi ya kuvuta ili kuepuka unyanyasaji wa GITHUB_TOKEN uliotolewa kwa mifumo inayotekelezwa.

Ushirikiano

Niambie kama unajua mwisho wa API wa kupata habari hii!

  • Sera ya ufikiaji wa programu za watu wa tatu: Inapendekezwa kuzuia ufikiaji wa kila programu na kuruhusu tu zile zinazohitajika (baada ya kuzipitia).

  • Programu za GitHub zilizosakinishwa: Inapendekezwa kuruhusu tu zile zinazohitajika (baada ya kuzipitia).

Uchunguzi & Mashambulizi yanayotumia vibali

Kwa kesi hii tutadhani umepata ufikiaji fulani kwenye akaunti ya github.

Kwa Vibali vya Mtumiaji

Ikiwa kwa namna fulani tayari una vibali vya mtumiaji ndani ya shirika, unaweza kuingia tu na kuangalia ni majukumu ya shirika na shirika unayo, ikiwa wewe ni mwanachama wa kawaida, angalia ni ruhusa zipi wanachama wa kawaida wanazo, katika makundi gani uko, ni ruhusa zipi unazo kwenye repos, na jinsi repos zilivyo kingwa.

Tafadhali kumbuka kwamba 2FA inaweza kutumika hivyo utaweza kupata habari hii tu ikiwa unaweza pita ukaguzi huo.

Kumbuka kwamba ikiwa unafanikiwa kuiba kuki ya user_session (kwa sasa imeboreshwa na SameSite: Lax) unaweza kujifanya kuwa mtumiaji bila kuhitaji vibali au 2FA.

Angalia sehemu hapa chini kuhusu njia za kudanganya ulinzi wa matawi ikiwa itakuwa na manufaa.

Kwa Kitufe cha SSH cha Mtumiaji

Github inaruhusu watumiaji kuweka vitufe vya SSH ambavyo vitatumika kama njia ya uthibitishaji wa kuweka kanuni kwa niaba yao (hakuna 2FA inayotumika).

Kwa kitufe hiki unaweza kufanya mabadiliko kwenye repositoria ambapo mtumiaji ana baadhi ya ruhusa, hata hivyo huwezi kutumia kufikia api ya github kuchunguza mazingira. Hata hivyo, unaweza kuchunguza mipangilio ya ndani ili kupata habari kuhusu repos na mtumiaji unaofikia:

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

Ikiwa mtumiaji ameboresha jina lake la mtumiaji kama jina lake la github unaweza kupata funguo za umma alizoweka kwenye akaunti yake kwenye https://github.com/<github_username>.keys, unaweza kuchunguza hii ili kuthibitisha kwamba funguo ya kibinafsi uliyoipata inaweza kutumika.

Funguo za SSH pia zinaweza kuwekwa kwenye hazina kama funguo za kupeleka. Mtu yeyote mwenye ufikiaji wa funguo hii ataweza kuzindua miradi kutoka kwenye hazina. Kawaida kwenye seva yenye funguo tofauti za kupeleka, faili ya ndani ~/.ssh/config itakupa habari kuhusu funguo ipi inahusiana.

Funguo za GPG

Kama ilivyoelezwa hapa mara nyingine inahitajika kusaini maandiko au unaweza kugunduliwa.

Chunguza kwa kujua ikiwa mtumiaji wa sasa ana funguo yoyote kwa:

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

Kwa Token ya Mtumiaji

Kwa maelezo zaidi kuhusu Vyeti vya Mtumiaji angalia taarifa za msingi.

Tokeni ya mtumiaji inaweza kutumika badala ya nenosiri kwa Git kupitia HTTPS, au inaweza kutumika kwa uthibitisho kwa API kupitia Uthibitisho wa Msingi. Kulingana na mamlaka iliyowekwa unaweza kufanya vitendo tofauti.

Tokeni ya Mtumiaji inaonekana kama hivi: ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123

Kwa Maombi ya Oauth

Kwa maelezo zaidi kuhusu Maombi ya Oauth ya Github angalia taarifa za msingi.

Mshambuliaji anaweza kuunda Maombi ya Oauth yenye nia mbaya kufikia data/vitendo vya siri vya watumiaji ambao huwaruhusu labda kama sehemu ya kampeni ya ughushi.

Hizi ni mamlaka ambazo maombi ya Oauth yanaweza kuomba. Daima mtumiaji anapaswa kuangalia mamlaka zinazohitajika kabla ya kuzikubali.

Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, shirika linaweza kutoa/kukataa upatikanaji wa maombi ya watu wa tatu kwa habari/repos/vitendo vinavyohusiana na shirika.

Kwa Maombi ya Github

Kwa maelezo zaidi kuhusu Maombi ya Github angalia taarifa za msingi.

Mshambuliaji anaweza kuunda Maombi ya Github yenye nia mbaya kufikia data/vitendo vya siri vya watumiaji ambao huwaruhusu labda kama sehemu ya kampeni ya ughushi.

Zaidi ya hayo, kama ilivyoelezwa katika taarifa za msingi, shirika linaweza kutoa/kukataa upatikanaji wa maombi ya watu wa tatu kwa habari/repos/vitendo vinavyohusiana na shirika.

Kuvunja na Kutumia Vibaya Hatua za Github

Kuna njia kadhaa za kuvunja na kutumia vibaya Hatua ya Github, zitazame hapa:

pageAbusing Github Actions

Kupuuza Kinga ya Matawi

  • Hitaji idhini kadhaa: Ikiwa umevunja akaunti kadhaa unaweza tu kukubali maombi yako ya PR kutoka kwa akaunti nyingine. Ikiwa una akaunti ambayo uliunda PR kutoka hapo huwezi kukubali PR yako mwenyewe. Hata hivyo, ikiwa una ufikiaji wa mazingira ya Hatua ya Github ndani ya repo, ukitumia GITHUB_TOKEN unaweza kuidhinisha PR yako na kupata idhini moja kwa njia hii.

  • Angalia kwa hili na kwa kizuizi cha Wamiliki wa Kanuni kwamba kawaida mtumiaji hataweza kuidhinisha PR zake mwenyewe, lakini ikiwa unaweza, unaweza kutumia vibaya kuidhinisha PR zako.

  • Futa idhini wakati maandishi mapya yanapopakiwa: Ikiwa hii haijawekwa, unaweza kuwasilisha kanuni halali, subiri mpaka mtu aithibitishe, na weka kanuni yenye nia mbaya na kuimega kwenye tawi lililolindwa.

  • Hitaji mapitio kutoka kwa Wamiliki wa Kanuni: Ikiwa hii imeamilishwa na wewe ni Mmiliki wa Kanuni, unaweza kufanya Hatua ya Github kuunda PR yako na kisha kuithibitisha mwenyewe.

  • Wakati faili ya CODEOWNER imepangiliwa vibaya Github haitoi malalamiko lakini haifanyi matumizi yake. Kwa hivyo, ikiwa imepangiliwa vibaya kinga ya Wamiliki wa Kanuni haitekelezwi.

  • Ruhusu waigizaji maalum kukiuka mahitaji ya maombi ya kuvuta: Ikiwa wewe ni mmoja wa waigizaji hawa unaweza kukiuka kinga ya maombi ya kuvuta.

  • Jumuisha wasimamizi: Ikiwa hii haijawekwa na wewe ni msimamizi wa repo, unaweza kukiuka kinga ya tawi hili.

  • Utekaji wa PR: Unaweza kuwa na uwezo wa kurekebisha PR ya mtu mwingine kwa kuongeza kanuni yenye nia mbaya, kuidhinisha PR inayotokana na hilo mwenyewe na kufunga kila kitu.

  • Kuondoa Kinga ya Matawi: Ikiwa wewe ni msimamizi wa repo unaweza kulemaza kinga, kufunga PR yako na kuweka kinga hizo tena.

  • Kukiuka kinga ya kuvuta: Ikiwa repo inaruhusu watumiaji fulani tu kutuma kuvuta (kufunga kanuni) kwenye matawi (kinga ya tawi inaweza kulinda matawi yote ikieleza joker *).

  • Ikiwa una ufikiaji wa kuandika kwenye repo lakini hauruhusiwi kufunga kanuni kwa sababu ya kinga ya tawi, bado unaweza kuunda tawi jipya na ndani yake kuunda hatua ya github ambayo inaanzishwa wakati kanuni inapofungwa. Kwa kuwa kinga ya tawi haitalinda tawi hadi litakapoanzishwa, kufungua kanuni ya kwanza kwenye tawi hilo kutasababisha utekelezaji wa hatua ya github.

Kukiuka Kinga ya Mazingira

Kwa maelezo zaidi kuhusu Mazingira ya Github angalia taarifa za msingi.

Katika kesi ambapo mazingira yanaweza kufikiwa kutoka matawi yote, hayalindwi na unaweza kwa urahisi kufikia siri ndani ya mazingira. Kumbuka kwamba unaweza kukuta repos ambapo matawi yote yanalindwa (kwa kutaja majina yake au kwa kutumia *) katika hali hiyo, tafuta tawi ambalo unaweza kufunga kanuni na unaweza kuchota siri kwa kuunda hatua mpya ya github (au kubadilisha moja).

Kumbuka, unaweza kukuta hali ya kipekee ambapo matawi yote yanalindwa (kupitia joker *) imetajwa nani anaweza kufunga kanuni kwenye matawi (unaweza kutaja hilo katika kinga ya tawi) na mtumiaji wako hauruhusiwi. Bado unaweza kutekeleza hatua ya github ya desturi kwa sababu unaweza kuunda tawi na kutumia kichocheo cha kufunga juu yake. Kinga ya tawi inaruhusu kufunga kwenye tawi jipya hivyo hatua ya github itaanzishwa.

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

Tafadhali kumbuka baada ya kuunda tawi ulinzi wa tawi utatumika kwa tawi jipya na hutaweza kulibadilisha, lakini kufikia wakati huo tayari utakuwa umeshatoa siri.

Uimara

  • Zalisha ishara ya mtumiaji

  • Pora ishara za github kutoka siri

  • Kufuta matokeo ya mfumo wa kazi na matawi

  • Toa ruhusa zaidi kwa shirika lote

  • Unda kamba za wavuti kwa ajili ya kuchukua habari

  • Alika washirika wa nje

  • Ondoa kamba za wavuti zilizotumiwa na SIEM

  • Unda/abadilisha Hatua ya Github na mlango wa nyuma

  • Pata Hatua ya Github inayoweza kudhuriwa kwa kuingiza amri kupitia ubadilishaji wa thamani ya siri

Kuingiza Kwa Udanganyifu - Mlango wa Nyuma kupitia kuingiza kwa kuingiza amri

Katika Github ni inawezekana kuunda PR kwa repo kutoka kwa fork. Hata kama PR haikubaliki, kitambulisho cha kuingiza ndani ya repo ya awali kitabuniwa kwa toleo la fork la nambari. Hivyo, mshambuliaji anaweza kufunga kutumia kuingiza maalum kutoka kwa repo inayoonekana kuwa halali ambayo haikuundwa na mmiliki wa repo.

Kama 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

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated