OpenShift - Jenkins Build Pod Override
Jenkins in Openshift - sostituzioni del pod di build
L'autore originale di questa pagina è Fares
Plugin Kubernetes per Jenkins
Questo plugin è principalmente responsabile delle funzioni di base di Jenkins all'interno di un cluster openshift/kubernetes. Documentazione ufficiale qui Offre alcune funzionalità come la possibilità per gli sviluppatori di sovrascrivere alcune configurazioni predefinite di un pod di build di Jenkins.
Funzionalità principale
Questo plugin consente flessibilità agli sviluppatori durante la compilazione del loro codice in un ambiente adeguato.
Alcuni abusi sfruttando l'override yaml del pod
Tuttavia, può essere abusato per utilizzare qualsiasi immagine accessibile come Kali Linux ed eseguire comandi arbitrari utilizzando strumenti preinstallati da quell'immagine. Nell'esempio seguente possiamo esfiltrare il token dell'account di servizio del pod in esecuzione.
Sovrascrittura della build di Jenkins in OpenShift
Quando si lavora con Jenkins su OpenShift, è possibile sovrascrivere le impostazioni predefinite della build Jenkins utilizzando un metodo diverso. Di seguito sono riportati i passaggi per eseguire questa operazione:
Accedi al tuo progetto OpenShift che contiene la build di Jenkins.
Naviga nella sezione "Builds" e seleziona la build di Jenkins che desideri sovrascrivere.
Fai clic su "Configuration" per aprire le impostazioni della build.
Scorri verso il basso fino a trovare la sezione relativa agli "Overrides" della build.
Qui puoi modificare le configurazioni predefinite della build di Jenkins per adattarle alle tue esigenze specifiche.
Assicurati di salvare le modifiche apportate prima di uscire dalla pagina.
Campione per sovrascrivere lo spazio dei nomi del pod
Un altro esempio che cerca di montare un serviceaccount (che potrebbe avere più autorizzazioni rispetto a quello predefinito, che esegue la tua build) in base al suo nome. Potresti aver bisogno di indovinare o enumerare prima i serviceaccount esistenti.
La stessa tecnica si applica per provare a montare un Segreto. L'obiettivo finale qui sarebbe capire come configurare la build del tuo pod per pivotare o ottenere privilegi in modo efficace.
Andando oltre
Una volta che ti sei abituato a sperimentare, utilizza le tue conoscenze su Jenkins e Kubernetes/Openshift per trovare configurazioni errate / abusi.
Poniti le seguenti domande:
Quale service account viene utilizzato per distribuire i pod di build?
Quali ruoli e permessi ha? Può leggere i segreti dello spazio dei nomi in cui mi trovo attualmente?
Posso enumerare ulteriormente altri pod di build?
Da un sa compromesso, posso eseguire comandi sul nodo/pod master?
Posso enumerare ulteriormente il cluster per pivotare altrove?
Quale SCC è applicato?
Puoi scoprire quali comandi oc/kubectl emettere qui e qui.
Possibili scenari di privesc/pivoting
Supponiamo che durante la tua valutazione hai scoperto che tutte le build di Jenkins vengono eseguite all'interno di uno spazio dei nomi chiamato worker-ns. Hai scoperto che un service account predefinito chiamato default-sa è montato sui pod di build, tuttavia non ha molti permessi tranne l'accesso in lettura su alcune risorse, ma sei riuscito a identificare un service account esistente chiamato master-sa. Supponiamo anche che tu abbia il comando oc installato all'interno del container di build in esecuzione.
Con lo script di build sottostante puoi prendere il controllo del service account master-sa e enumerare ulteriormente.
A seconda del tuo accesso, devi continuare il tuo attacco dallo script di build oppure puoi effettuare il login direttamente come questo sa sul cluster in esecuzione:
Se questo sa ha abbastanza permessi (come pod/exec), puoi anche prendere il controllo dell'intera istanza di jenkins eseguendo comandi all'interno del pod del nodo master, se viene eseguito nello stesso namespace. Puoi facilmente identificare questo pod dal suo nome e dal fatto che deve montare un PVC (persistant volume claim) utilizzato per memorizzare i dati di jenkins.
Nel caso in cui il pod del nodo master non sia in esecuzione all'interno dello stesso namespace dei workers, puoi provare attacchi simili mirando al namespace master. Supponiamo che si chiami jenkins-master. Tieni presente che il serviceAccount master-sa deve esistere nel namespace jenkins-master (e potrebbe non esistere nel namespace worker-ns).
Last updated