Jenkins Security
Taarifa Msingi
Jenkins ni chombo kinachotoa njia rahisi ya kuanzisha mazingira ya usambazaji wa kiotomatiki au utoaji wa kiotomatiki (CI/CD) kwa karibu aina yoyote ya lugha za programu na hifadhi za msimbo wa chanzo kwa kutumia mabomba. Zaidi ya hayo, inaautomatisha kazi mbalimbali za maendeleo za kawaida. Ingawa Jenkins haitoi hitaji la kuunda hati za hatua binafsi, inatoa njia ya haraka na imara zaidi ya kuunganisha mfululizo mzima wa zana za kujenga, kujaribu, na kusambaza kuliko mtu anaweza kujenga kwa mkono kwa urahisi.
pageBasic Jenkins InformationUchambuzi Usiothibitishwa
Kwa lengo la kutafuta kurasa za Jenkins zenye kuvutia bila uthibitisho kama (/watu au /watuAsynch, hii inaorodhesha watumiaji wa sasa) unaweza kutumia:
Angalia ikiwa unaweza kutekeleza amri bila kuhitaji uthibitisho:
Bila sifa unaweza kutazama ndani ya njia ya /asynchPeople/ au /securityRealm/user/admin/search/index?q= kwa majina ya watumiaji.
Unaweza kupata toleo la Jenkins kutoka kwa njia ya /oops au /error
Madokezo ya Hatari
Ingia
Katika habari msingi unaweza kuangalia njia zote za kuingia ndani ya Jenkins:
pageBasic Jenkins InformationJisajili
Utaweza kupata mifano ya Jenkins ambayo inakuruhusu kuunda akaunti na kuingia ndani yake. Rahisi kama hiyo.
Ingia kwa SSO
Pia ikiwa SSO kazi/zana zilikuwepo basi unapaswa kujaribu kuingia kwenye programu kwa kutumia akaunti ya majaribio (yaani, akaunti ya majaribio ya Github/Bitbucket). Mbinu kutoka hapa.
Kuvunja Neno la Siri
Jenkins haina sera ya neno la siri na kizuizi cha kuvunja-jina la mtumiaji. Ni muhimu kufanya kuvunja-jina la mtumiaji kwani nywila dhaifu au majina ya watumiaji kama nywila yanaweza kutumiwa, hata majina ya watumiaji yaliyopinduliwa kama nywila.
Kupuliza Nywila
Tumia skripti hii ya python au skripti hii ya powershell.
Kupitisha Uzuiaji wa Anwani ya IP
Shirika nyingi huchanganya mifumo ya usimamizi wa chanzo cha kudhibiti (SCM) inayotegemea SaaS kama GitHub au GitLab na suluhisho la CI lililohifadhiwa kwenye ndani, kama Jenkins au TeamCity. Hii inaruhusu mifumo ya CI kupokea matukio ya webhook kutoka kwa wauzaji wa kudhibiti chanzo wa SaaS, hasa kwa kusababisha kazi za mabomba.
Kufanikisha hili, mashirika hupitia orodha nyeupe ya mbalimbali ya IP ya jukwaa za SCM, kuwaruhusu kupata mfumo wa CI wa ndani kupitia webhooks. Hata hivyo, ni muhimu kutambua kwamba yeyote anaweza kuunda akaunti kwenye GitHub au GitLab na kuiboresha ili kusababisha webhook, kwa uwezekano wa kutuma maombi kwa mfumo wa CI wa ndani.
Matumizi Mabaya ya Jenkins ya Ndani
Katika mazingira haya, tutadhani una akaunti halali ya kupata Jenkins.
Kulingana na mfumo wa Idhini uliowekwa katika Jenkins na ruhusa ya mtumiaji aliyeathiriwa, unaweza au huenda usiweze kufanya mashambulizi yafuatayo.
Kwa maelezo zaidi angalia habari za msingi:
pageBasic Jenkins InformationKuorodhesha Watumiaji
Ikiwa umepata ufikiaji wa Jenkins unaweza kuorodhesha watumiaji wengine waliosajiliwa kwenye http://127.0.0.1:8080/asynchPeople/
Kudondosha Ujenzi ili Kupata Siri za Maandishi Wazi
Tumia skripti hii kudondosha matokeo ya konsoli ya ujenzi na mazingira ya ujenzi kwa matumaini ya kupata siri za maandishi wazi.
Kuiba SSH Credentials
Ikiwa mtumiaji aliyeathiriwa ana mamlaka za kutosha za kuunda/kurekebisha nodi mpya ya Jenkins na vyeti vya SSH tayari vimehifadhiwa kufikia nodi zingine, anaweza kuiba vyeti hivyo kwa kuunda/kurekebisha nodi na kuweka mwenyeji ambao utarekodi vyeti bila kuthibitisha funguo ya mwenyeji:
Kawaida utapata vyeti vya SSH vya Jenkins katika mtoa huduma wa kimataifa (/credentials/
), hivyo unaweza pia kuvitiririsha kama unavyoweza kuvitiririsha siri nyingine yoyote. Taarifa zaidi katika Sehemu ya Kutiririsha Siri.
RCE katika Jenkins
Kupata shell kwenye seva ya Jenkins humpa mshambuliaji fursa ya kuvuja siri zote na mazingira ya mazingira na kutumia mashine nyingine zilizoko kwenye mtandao huo huo au hata kukusanya vyeti vya wingu.
Kwa chaguo-msingi, Jenkins ita endesha kama SYSTEM. Hivyo, kuathiri itampa mshambuliaji mamlaka ya SYSTEM.
RCE Kuunda/Kurekebisha Mradi
Kuunda/Kurekebisha mradi ni njia ya kupata RCE kwenye seva ya Jenkins:
pageJenkins RCE Creating/Modifying ProjectRCE Kutekeleza Skripti ya Groovy
Unaweza pia kupata RCE kwa kutekeleza skripti ya Groovy, ambayo inaweza kuwa ya siri kuliko kuunda mradi mpya:
pageJenkins RCE with Groovy ScriptRCE Kuunda/Kurekebisha Mpipelines
Unaweza pia kupata RCE kwa kuunda/kurekebisha mpipeline:
pageJenkins RCE Creating/Modifying PipelineUtekaji wa Mpipeline
Ili kutumia mipipelines bado unahitaji kupata ufikio wa Jenkins.
Kujenga Mipipelines
Mipipelines inaweza pia kutumika kama makanismo ya kujenga katika miradi, katika kesi hiyo inaweza kusanidiwa faili ndani ya hazina ambayo italeta sintaksia ya mpipeline. Kwa chaguo-msingi /Jenkinsfile
hutumiwa:
Pia ni kupatikana kuhifadhi faili za usanidi wa mpipeline mahali pengine (katika hazina nyingine kwa mfano) kwa lengo la kutenganisha ufikio wa hazina na ufikio wa mpipeline.
Ikiwa mshambuliaji ana ufikio wa kuandika faili hiyo ataweza kuibadilisha na kuzindua mpipeline bila hata kupata ufikio wa Jenkins. Inawezekana mshambuliaji atahitaji kupita kwa baadhi ya ulinzi wa matawi (kulingana na jukwaa na mamlaka ya mtumiaji wanaweza kupuuzwa au la).
Mizizi ya kawaida ya kuzindua mpipeline ya desturi ni:
Ombi la kuvuta kwa tawi kuu (au labda kwa matawi mengine)
Kusukuma kwa tawi kuu (au labda kwa matawi mengine)
Kusasisha tawi kuu na kusubiri mpaka itekelezwe kwa njia fulani
Ikiwa wewe ni mtumiaji wa nje usitarajie kuunda PR kwa tawi kuu la hazina ya mtumiaji/shirika lingine na kuzindua mpipeline... lakini ikiwa ni mbaya kusanidi unaweza kwa ukamilifu kuathiri makampuni kwa kuzitumia hivi.
RCE ya Mpipeline
Katika sehemu ya awali ya RCE tayari ilionyesha mbinu ya kupata RCE kwa kubadilisha mpipeline.
Kuangalia Mazingira ya Mazingira
Inawezekana kutangaza mazingira ya mazingira wazi kwa mpipeline mzima au kwa hatua maalum. Mazingira haya ya mazingira hayafai kuwa na habari nyeti, lakini mshambuliaji daima anaweza kuangalia usanidi/wavu wa mpipeline wote/Jenkinsfiles:
Kutiririsha siri
Kwa habari kuhusu jinsi siri zinavyoshughulikiwa kawaida na Jenkins angalia taarifa za msingi:
pageBasic Jenkins InformationAnwani za siri zinaweza kuwa zilizolengwa kwa watoa huduma wa ulimwengu (/credentials/
) au kwa miradi maalum (/job/<project-name>/configure
). Kwa hivyo, ili kuvuja zote unahitaji kuambukiza angalau miradi yote inayohifadhi siri na kutekeleza mizunguko ya desturi/iliyochafuliwa.
Kuna tatizo lingine, ili kupata siri ndani ya env ya mizunguko ya desturi unahitaji kujua jina na aina ya siri. Kwa mfano, ukijaribu kupakia siri ya usernamePassword
kama siri ya string
utapata kosa hili:
Hapa una njia ya kupakia aina za siri za kawaida:
Mwishoni mwa ukurasa huu unaweza kupata aina zote za vibali: https://www.jenkins.io/doc/pipeline/steps/credentials-binding/
Njia bora ya kudump siri zote kwa wakati mmoja ni kwa kuharibu mashine ya Jenkins (kwa mfano, kwa kuendesha kitanzi cha nyuma kwenye node iliyojengwa-ndani) na kisha kuvuja funguo za msingi na siri zilizoandikwa na kuzifichua nje ya mtandao. Zaidi kuhusu jinsi ya kufanya hivi katika sehemu ya Nodes & Agents na katika sehemu ya Post Exploitation.
Vichocheo
Kutoka kwenye nyaraka: Mwongozo wa triggers
unadefini njia za kiotomatiki ambazo Pipeline inapaswa kuchapishwa tena. Kwa Pipelines zilizounganishwa na chanzo kama GitHub au BitBucket, triggers
inaweza isiwe muhimu kwani ushirikiano unaotegemea webhooks labda tayari upo. Vichocheo vilivyopo ni cron
, pollSCM
na upstream
.
Mfano wa Cron:
Angalia mifano mingine katika nyaraka.
Nodes & Agents
Kipengele cha Jenkins kinaweza kuwa na mawakala tofauti wanaofanya kazi kwenye mashine tofauti. Kutoka mtazamo wa mshambuliaji, kupata ufikiaji wa mashine tofauti kunamaanisha vitambulisho vya wingu tofauti vya kuiba au ufikiaji tofauti wa mtandao ambao unaweza kutumiwa kudukua mashine nyingine.
Kwa maelezo zaidi angalia habari za msingi:
pageBasic Jenkins InformationUnaweza kuchambua nodes zilizowekwa katika /computer/
, kawaida utapata Node Iliyojengwa Ndani
(ambayo ni node inayofanya kazi Jenkins) na labda zaidi:
Ni hasa ya kuvutia kudukua node Iliyojengwa Ndani kwa sababu ina habari nyeti za Jenkins.
Ili kuonyesha unataka kutekeleza mabomba kwenye node ya Jenkins iliyojengwa ndani unaweza kufafanua ndani ya mabomba mpangilio ufuatao:
Mfano kamili
Mpipa katika wakala maalum, na kichocheo cha cron, na mazingira ya mpipa na hatua, ikilipakia mazingira 2 katika hatua na kutuma ganda la nyuma:
Baada ya Uvamizi
Metasploit
Siri za Jenkins
Unaweza kuorodhesha siri kwa kufikia /credentials/
ikiwa una idhini ya kutosha. Tafadhali kumbuka kuwa hii itaorodhesha tu siri ndani ya faili ya credentials.xml
, lakini faili za usanidi wa ujenzi zinaweza kuwa na siri zaidi.
Ikiwa unaweza kuona usanidi wa kila mradi, unaweza pia kuona huko majina ya siri (siri) zinazotumiwa kupata hazina na siri zingine za mradi.
Kutoka Groovy
pageJenkins Dumping Secrets from GroovyKutoka diski
Faili hizi zinahitajika kufichua siri za Jenkins:
secrets/master.key
secrets/hudson.util.Secret
Siri kama hizo kawaida zinaweza kupatikana katika:
credentials.xml
jobs/.../build.xml
jobs/.../config.xml
Hapa kuna regex ya kuzipata:
Kufichua siri za Jenkins nje ya mtandao
Ikiwa umedump maneno muhimu ya kufichua siri, tumia script hii kufichua siri hizo.
Kufichua siri za Jenkins kutoka Groovy
Unda mtumiaji mpya wa admin
Fikia faili ya Jenkins config.xml katika
/var/lib/jenkins/config.xml
auC:\Program Files (x86)\Jenkis\
Tafuta neno
<useSecurity>true</useSecurity>
na badilisha nenotrue
kuwafalse
.sed -i -e 's/<useSecurity>true</<useSecurity>false</g' config.xml
Anza upya server ya Jenkins:
service jenkins restart
Sasa nenda kwenye portal ya Jenkins tena na Jenkins haitauliza nywila yoyote wakati huu. Nenda kwenye "Manage Jenkins" kuweka nywila ya msimamizi tena.
Wezesha tena usalama kwa kubadilisha mipangilio kuwa
<useSecurity>true</useSecurity>
na anzisha upya Jenkins tena.
Marejeo
Last updated