Jenkins Security
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Jenkins is 'n hulpmiddel wat 'n eenvoudige metode bied om 'n deurlopende integrasie of deurlopende aflewering (CI/CD) omgewing vir byna enige kombinasie van programmering tale en bronkode repositories met behulp van pyplyne op te stel. Verder outomatiseer dit verskeie roetine ontwikkelings take. Terwyl Jenkins nie die noodsaaklikheid om skripte vir individuele stappe te skep verwyder nie, bied dit 'n vinniger en meer robuuste manier om die hele reeks van bou-, toets- en ontplooiing gereedskap te integreer as wat 'n mens maklik handmatig kan opstel.
Basic Jenkins InformationOm te soek na interessante Jenkins bladsye sonder outentisering soos (/people of /asynchPeople, dit lys die huidige gebruikers) kan jy gebruik maak van:
Kontroleer of jy opdragte kan uitvoer sonder om te hoef te autentiseer:
Without credentials you can look inside /asynchPeople/ path or /securityRealm/user/admin/search/index?q= for gebruikersname.
You may be able to get the Jenkins version from the path /oops or /error
In the basic information you can check alle maniere om in Jenkins aan te meld:
Basic Jenkins InformationYou will be able to find Jenkins instances that toelaat dat jy 'n rekening skep en daarin aanmeld. So eenvoudig soos dit.
Also if SSO funksionaliteit/plugins were present then you should attempt to aanmeld to the application using a test account (i.e., a test Github/Bitbucket rekening). Trick from here.
Jenkins lacks wagwoordbeleid and gebruikersnaam bruteforce mitigasie. It's essential to bruteforce users since swak wagwoorde or gebruikersname as wagwoorde may be in use, even omgekeerde gebruikersname as wagwoorde.
Gebruik hierdie python skrip of hierdie powershell skrip.
Baie organisasies kombineer SaaS-gebaseerde bronbeheer (SCM) stelsels soos GitHub of GitLab met 'n interne, self-gehoste CI oplossing soos Jenkins of TeamCity. Hierdie opstelling laat CI stelsels toe om webhook-gebeurtenisse van SaaS bronbeheer verskaffers te ontvang, hoofsaaklik om pyplyn take te aktiveer.
Om dit te bereik, witlys organisasies die IP reekse van die SCM platforms, wat hulle toelaat om toegang te verkry tot die interne CI stelsel via webhooks. Dit is egter belangrik om te noem dat enigeen 'n rekening op GitHub of GitLab kan skep en dit kan konfigureer om 'n webhook te aktiveer, wat moontlik versoeke na die interne CI stelsel kan stuur.
Kontroleer: https://www.paloaltonetworks.com/blog/prisma-cloud/repository-webhook-abuse-access-ci-cd-systems-at-scale/
In hierdie scenario's gaan ons aanvaar dat jy 'n geldige rekening het om toegang tot Jenkins te verkry.
Afhangende van die Magtigings meganisme wat in Jenkins geconfigureer is en die toestemming van die gecompromitteerde gebruiker, kan jy dalk die volgende aanvalle uitvoer of nie.
Vir meer inligting, kyk na die basiese inligting:
Basic Jenkins InformationAs jy toegang tot Jenkins het, kan jy ander geregistreerde gebruikers lys in http://127.0.0.1:8080/asynchPeople/
Gebruik hierdie skrip om bou konsoluitsette en bou omgewingsveranderlikes te dump om hopelik duidelike teks geheime te vind.
As die gecompromitteerde gebruiker genoeg bevoegdhede het om 'n nuwe Jenkins node te skep/wysig en SSH kredensiale reeds gestoor is om toegang tot ander nodes te verkry, kan hy daardie kredensiale steel deur 'n node te skep/wysig en 'n gasheer in te stel wat die kredensiale sal opneem sonder om die gasheer sleutel te verifieer:
Jy sal gewoonlik Jenkins ssh kredensiale in 'n globale verskaffer (/credentials/
) vind, so jy kan dit ook dump soos jy enige ander geheim sou dump. Meer inligting in die Dumping secrets section.
Om 'n shell in die Jenkins bediener te kry, gee die aanvaller die geleentheid om al die geheime en omgewing veranderlikes te lek en om ander masjiene in dieselfde netwerk te ontgin of selfs cloud kredensiale te versamel.
Standaard sal Jenkins as SYSTEM loop. Dus, om dit te kompromitteer sal die aanvaller SYSTEM bevoegdhede gee.
Om 'n projek te skep/wysig is 'n manier om RCE oor die Jenkins bediener te verkry:
Jenkins RCE Creating/Modifying ProjectJy kan ook RCE verkry deur 'n Groovy skrip uit te voer, wat dalk minder opmerklik is as om 'n nuwe projek te skep:
Jenkins RCE with Groovy ScriptJy kan ook RCE verkry deur 'n pipeline te skep/wysig:
Jenkins RCE Creating/Modifying PipelineOm pipelines te ontgin moet jy steeds toegang tot Jenkins hê.
Pipelines kan ook as boumeganisme in projekte gebruik word, in daardie geval kan dit geconfigureer word as 'n lêer binne die repository wat die pipeline sintaksis sal bevat. Standaard word /Jenkinsfile
gebruik:
Dit is ook moontlik om pipeline konfigurasielêers in ander plekke te stoor (in ander repositories byvoorbeeld) met die doel om toegang tot die repository en die pipeline toegang te skei.
As 'n aanvaller skrywe toegang oor daardie lêer het, sal hy in staat wees om dit te wysig en potensieel die pipeline te aktiveer sonder om toegang tot Jenkins te hê. Dit is moontlik dat die aanvaller sal moet omseil sommige tak beskermings (afhangende van die platform en die gebruiker bevoegdhede kan dit omseil of nie).
Die mees algemene triggers om 'n pasgemaakte pipeline uit te voer is:
Trekversoek na die hoof tak (of potensieel na ander takke)
Stoot na die hoof tak (of potensieel na ander takke)
Opdateer die hoof tak en wag totdat dit op een of ander manier uitgevoer word
As jy 'n eksterne gebruiker is, moet jy nie verwag om 'n PR na die hoof tak van die repo van ander gebruiker/organisasie te skep en die pipeline te aktiveer... maar as dit sleg geconfigureer is, kan jy heeltemal maatskappye kompromitteer net deur dit te ontgin.
In die vorige RCE afdeling is daar reeds 'n tegniek aangedui om RCE te verkry deur 'n pipeline te wysig.
Dit is moontlik om duidelike teks omgewing veranderlikes vir die hele pipeline of vir spesifieke fases te verklaar. Hierdie omgewing veranderlikes moet nie sensitiewe inligting bevat nie, maar 'n aanvaller kan altyd alle pipeline konfigurasies/Jenkinsfiles nagaan:
Vir inligting oor hoe geheimen gewoonlik deur Jenkins hanteer word, kyk na die basiese inligting:
Basic Jenkins InformationAkrediteer kan gegrondeer word op globale verskaffers (/credentials/
) of op spesifieke projekte (/job/<project-name>/configure
). Daarom, om al hulle te exfiltrate, moet jy ten minste al die projekte wat geheimen bevat, kompromitteer en aangepaste/vergiftigde pipelines uitvoer.
Daar is 'n ander probleem, om 'n geheim binne die env van 'n pipeline te kry, moet jy die naam en tipe van die geheim weet. Byvoorbeeld, as jy probeer om 'n usernamePassword
geheim as 'n string
geheim te laai, sal jy hierdie fout kry:
Hier is die manier om 'n paar algemene geheime tipes te laai:
Aan die einde van hierdie bladsy kan jy alle tipe geloofsbewyse vind: https://www.jenkins.io/doc/pipeline/steps/credentials-binding/
Die beste manier om alle die geheime op een slag te dump is deur die Jenkins masjien te kompromitteer (byvoorbeeld deur 'n omgekeerde skulp in die ingeboude node te laat loop) en dan die master sleutels en die versleutelde geheime te lek en dit offline te ontsleutel. Meer oor hoe om dit te doen in die Nodes & Agents section en in die Post Exploitation section.
Van die dokumentasie: Die triggers
riglyn definieer die geoutomatiseerde maniere waarop die Pipeline weer geaktiveer moet word. Vir Pipelines wat geïntegreer is met 'n bron soos GitHub of BitBucket, mag triggers
nie nodig wees nie, aangesien webhooks-gebaseerde integrasie waarskynlik reeds teenwoordig sal wees. Die triggers wat tans beskikbaar is, is cron
, pollSCM
en upstream
.
Cron voorbeeld:
Kontroleer ander voorbeelde in die dokumentasie.
'n Jenkins-instansie mag verskillende agente op verskillende masjiene hê. Vanuit 'n aanvaller se perspektief beteken toegang tot verskillende masjiene verskillende potensiële wolkakkredite om te steel of verskillende netwerktoegang wat misbruik kan word om ander masjiene te ontgin.
Vir meer inligting, kyk na die basiese inligting:
Basic Jenkins InformationJy kan die gekonfigureerde nodes in /computer/
opnoem, jy sal gewoonlik die **Built-In Node
** (wat die node is wat Jenkins uitvoer) en moontlik meer vind:
Dit is spesiaal interessant om die Built-In node te kompromitteer omdat dit sensitiewe Jenkins-inligting bevat.
Om aan te dui dat jy die pipeline in die ingeboude Jenkins-node wil uitvoer, kan jy die volgende konfigurasie binne die pipeline spesifiseer:
Pypelyn in 'n spesifieke agent, met 'n cron-trigger, met pypelyn en fase omgewingsveranderlikes, wat 2 veranderlikes in 'n stap laai en 'n omgekeerde skulp stuur:
Jy kan die geheime lys deur toegang te verkry tot /credentials/
as jy genoeg regte het. Let daarop dat dit slegs die geheime binne die credentials.xml
lêer sal lys, maar bou konfigurasielêers mag ook meer krediete hê.
As jy die konfigurasie van elke projek kan sien, kan jy ook daar die name van die krediete (geheime) sien wat gebruik word om toegang tot die repository te verkry en ander krediete van die projek.
Hierdie lêers is nodig om Jenkins geheime te ontsleutel:
secrets/master.key
secrets/hudson.util.Secret
Sulke geheime kan gewoonlik gevind word in:
credentials.xml
jobs/.../build.xml
jobs/.../config.xml
Hier is 'n regex om hulle te vind:
As jy die nodige wagwoorde om die geheime te ontsleutel afgelaai het, gebruik hierdie skrif om daardie geheime te ontsleutel.
Toegang tot die Jenkins config.xml lêer in /var/lib/jenkins/config.xml
of C:\Program Files (x86)\Jenkis\
Soek vir die woord <useSecurity>true</useSecurity>
en verander die woord true
na false
.
sed -i -e 's/<useSecurity>true</<useSecurity>false</g' config.xml
Herstart die Jenkins bediener: service jenkins restart
Gaan nou weer na die Jenkins portaal en Jenkins sal nie enige geloofsbriewe vra hierdie keer nie. Jy navigeer na "Manage Jenkins" om die administrateur wagwoord weer in te stel.
Aktiveer die sekuriteit weer deur die instellings te verander na <useSecurity>true</useSecurity>
en herstart die Jenkins weer.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)