SUSE Fleet: Plain Text Storage of Vulnerability Exploit Helm Values
2025/09/01 gbhackers — SUSE Fleet に存在する深刻な脆弱性 CVE-2024-52284 が、GitHub セキュリティ・アドバイザリ GHSA-6h9x-9j5v-7w9h で公開された。この欠陥は、機密性の高い認証情報などを取り込む可能性の高い Helm チャートの値を、BundleDeployment リソース内に平文で保存するものであり、GET/LIST 権限を持つ全てのユーザーが、それらの値を閲覧できる状態にある。Kubernetes クラスター向けの GitOps 管理ツールの脆弱性を発見したのは、セキュリティ研究の samjustus である。

SUSE Fleet は、Git リポジトリと Kubernetes マニフェストを照合することで、継続的デプロイメントを効率化していく。具体的に言うと、BundleDeployment の Spec Options Helm Values フィールドを介して、ユーザーがカスタム Helm 値を指定すると、Fleet は照合ループを用いて、それらの値をダイレクトに適用していく。
Helm v3 は、Chart の状態と値を Kubernetes Secrets に保存し、保存時に暗号化を提供する。その一方で、従来からの Fleet は、Helm 値を暗号化せずに、BundleDeployment カスタム・リソースに埋め込んでいた。さらに、Kubernetes のデフォルトでは、カスタム・リソースのフィールドは保存時に暗号化されないため、クラスタ・データ・ストア内の機密情報は保護されていなかったことになる。
この脆弱性による主たる影響は、Secret の不正開示にある。つまり、クラスタ内の BundleDeployment オブジェクトへのアクセス権を持つユーザーであれば、暗号化されていない Helm 値を容易に取得し、認証情報やトークンなどの重要データを漏洩させる可能性がある。さらに、クラスタ内での保存時に、暗号化が有効化されなければ、Kubernetes のカスタム・リソースは平文の etcd エントリとして保存される。したがって、クラスタ・データ・ストアへのアクセス権を持つユーザーであれば、それらを侵害する可能性を得る。
Helm v3 は Secrets で保護に対応しているが、従来からの Fleet の挙動に明らかな欠陥があるため、BundleDeployment オブジェクトが kubectl や API サーバー経由でクエリされる際に、機密データが平文で露出していた。
CVSS と深刻度
脆弱性 CVE-2024-52284 の深刻度は、CVSS 3.1 ベース・スコアで 7.4 (High) と評価されている。指標については以下の通りである。
- 攻撃ベクター: ネットワーク
- 攻撃の複雑さ: Low
- 必要な権限: Low
- ユーザー操作: 不要
- 影響範囲: 変更済み
- 機密性への影響: 高
- 整合性への影響: なし
- 可用性への影響: なし
つまり、攻撃者は最小限の権限で、標準的な API 呼び出しを行うだけで、機密データを収集できる。
影響を受ける バージョン
- バージョン 0.11.0~0.11.10 未満
- バージョン 0.12.0~0.12.6 未満
- バージョン 0.13.0~0.13.1 未満
SUSE Fleet の修正版
- バージョン 0.14.0/0.13.1/0.12.6/0.11.10
今回の更新により Fleet が導入したのは、それぞれの BundleDeployment の Helm 値を、Kubernetes Secret として保存する仕組みである。Fleet コントローラーは照合前に Secret を生成し、その Secret を Fleet エージェントが参照するように変更されている。これにより、CRD オブジェクト内に Helm 値が平文で保存されることはなくなった。
緩和策
ユーザーに対して強く推奨されるのは、パッチ適用済みリリースへの、速やかなアップグレードである。
なお、迅速なアップグレードが困難な環境では、スペック内に値ファイルをダイレクトに記載せず、ファイル名のみを参照させることで、リスクを軽減できる。この方法により、Fleet は参照された値ファイルを Secret として管理する。
- 不適切な設定例:
texthelm:
valuesFiles:
- config-chart/values.yaml
- 安全な回避策:
texthelm:
valuesFiles:
- values.yaml
この命名規則により Fleet は、対象となるファイルを外部ファイルとして解釈し、平文で保存しなくなる。
推奨される対応
- Fleet をバージョン 0.14.0 以降に、または、現在のリリース・ラインに対応するパッチ適用済みバージョンにアップグレードする。
- 既存の BundleDeployment を監査し、誤って公開された Secret が存在しないことを確認する。侵害された認証情報は、直ちにローテーションする。
- すべての重要なネームスペースで、Kubernetes の保存時における暗号化を有効化し、Fleet の組み込み Secret ストレージを超える保護レイヤーを追加する。
- RBAC ポリシーを確認し、BundleDeployment リソースに対する GET/LIST 権限を、信頼できるユーザーのみに制限する。
これらの対応により、SUSE Fleet のセキュリティが強化され、また、クラスタ・マニフェスト内でシークレットを平文で保持しないという基本原則が徹底される。
また、認証情報の窃取手法の詳細については、MITRE ATT&CK Technique T1555: Credentials from Password Stores を参照してほしい。
SUSE Fleet に存在する脆弱性 CVE-2024-52284 は、Helm チャートの値を暗号化せずに、BundleDeployment リソースに平文で保存するというものです。そのため、クラスタ内で GET/LIST 権限を持つユーザーであれば、認証情報やトークンなどの機密データを直接閲覧できる状態になっていました。本来 Helm v3 では Secrets を用いて暗号化して保存する仕組みがありますが、Fleet ではその保護が適用されず、Kubernetes の etcd にも平文で記録されていたのが問題だと、この記事は指摘しています。ご利用のチームは、ご注意ください。よろしければ、Kubernetes で検索も、ご参照ください。
You must be logged in to post a comment.