leHACK 2025 : Writeup kubain (medium)
Writeup sur le challenge kubain (medium) 👍
Ce challenge fait suite au précédent : kubain (easy), mais un peu plus complexe. Je précise d'avance que je me suis arraché la tête dessus pendant plusieurs heures sans réussir à le terminer (mais je savais que j'étais proche de la fin)... Merci à Rolix sur le Discord HZV de m'avoir donné le dernier élément 😄
Pour reprendre la dernière analyse, nous avons donc une RCE et des droits RBAC permettant de faire certaines actions, et en particulier sur la CRD kubains.kubain.b0uz.in
:

L'utiliser à l'aveugle c'est presque impossible. Du coup on récupère sa définition pour savoir quel sont ses propriétés afin de pouvoir les exploiter (malheureusement pas de screenshot), ça passe par un kubectl get crd kubains.kubain.b0uz.in -o yaml
. Avec l'output on arrive comprendre qu'il prend en compte 2 paramètres, un hostpathPath
et un pvcType
. Clairement pas simple de créer un objet par cette méthode, mais bon ça fonctionne avec un peu d'acharnement (le status created
est visible) :

Encore des recherches car on ne sait absolument pas comment l'operator (kubain) fonctionne derrière, mais on arrive assez vite à voir qu'un service est créé utilisant le port 8080 (initialement j'ai trouvé cette piste dans l'env) :

Plusieurs heures après (et une fatigue en forte augmentation), on arrive à savoir que le pod créé repose sur la même application (à cause d'un curl sur http://bonjourmadame:8080
pas besoin de plus étant dans le même namespace), et donc avec pouvoir jouer avec la même RCE, et ça se complique... (quelques problèmes à repasser les commandes à travers la première RCE) mais ça fonctionne.
Après avoir cherché un peu partout des pistes (plusieurs fichiers, dont le /proc/mounts
) mais j'ai du me rendre à l'évidence que ce challenge m'a surpassé 🙁
Issue d'un retour sur le Discord HZV, la fin était tellement si proche... Il fallait mieux chercher où était monté le volume sur ce pod (via df -Ph
//proc/mounts
//proc/self/mountinfo
) et d'afficher les fichiers en utilisant la première méthode tel qu'un stock?cigar=../flag/
.
Plusieurs heures à me prendre la tête, une obsession tellement ce sujet était passionnant, sans compter cette fatigue... Ceci étant, même si j'ai pas réussi jusqu'au bout, je suis très content du chemin parcouru et mes méthodes se sont avérées être plutôt bonnes. 🙂