Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
POC_CVE-2026-42880 — Reproduce CVE-2026-42880, una vulnerabilidad crítica de ArgoCD que expone Secretos de Kubernetes a través de ServerSideDiff. Incluye configuración automatizada de laboratorio, scripts de activación y una plantilla de detección Nuclei para pruebas de seguridad. | Kitploit
Herramientas/GitHubGitHub/haerin-l/poc_cve-2026-42880
Análisis de VulnerabilidadesExplotaciónPruebas de PenetraciónSeguridad en la NubeMala ConfiguraciónAprendizaje y EducaciónLabs y Práctica
GitHubhaerin-l/poc_cve-2026-42880

POC_CVE-2026-42880

Reproduce CVE-2026-42880, una vulnerabilidad crítica de ArgoCD que expone Secretos de Kubernetes a través de ServerSideDiff. Incluye configuración automatizada de laboratorio, scripts de activación y una plantilla de detección Nuclei para pruebas de seguridad.

Ver Repositorio
21hace 4 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-42880 — Exposición de Secretos de ArgoCD mediante ServerSideDiff

Un entorno de laboratorio para reproducir y detectar CVE-2026-42880, una vulnerabilidad crítica en Argo CD donde el manejador gRPC ServerSideDiff expone datos de Secretos de Kubernetes a usuarios de solo lectura.


Resumen de la Vulnerabilidad

CampoDetalles
CVE IDCVE-2026-42880
GHSAGHSA-3v3m-wc6v-x4x3
CVSS9.6 (Crítico) — AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N
Versiones afectadasArgoCD 3.2.0–3.2.10, 3.3.0–3.3.8
Versiones parcheadas3.2.11, 3.3.9+
CWECWE-200, CWE-212

Causa Raíz

serverSideDiff() en el manejador gRPC de ArgoCD llama al dry-run de SSA de Kubernetes y devuelve predictedLive sin llamar a hideSecretData(), exponiendo valores de Secretos codificados en base64 en la respuesta.

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 ++++

Prerrequisitos del Ataque

Las tres condiciones deben cumplirse simultáneamente:

#CondiciónDetalles
1Versión vulnerable de ArgoCD3.2.0–3.2.10 o 3.3.0–3.3.8
2Anotación de la aplicaciónargocd.argoproj.io/compare-options: ServerSideDiff=true,IncludeMutationWebhook=true
3Administrador de campos externo en datos del SecretCampos data del Secret propiedad de un administrador que no sea ArgoCD (por ejemplo, External Secrets Operator, Helm, kubectl)

Solo se requiere role:readonly — no se necesitan permisos de escritura.


Arquitectura del Laboratorio

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)

Por qué es importante la división del administrador de campos

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

SSA dry-run: Kubernetes fusiona los campos de ambos administradores en predictedLive
  → ArgoCD NO es propietario de los datos → los datos no son enmascarados por ArgoCD
  → v3.2.0 devuelve predictedLive sin hideSecretData() → EXPUESTO

Prerrequisitos

HerramientaInstalación
kindbrew install kind
kubectlbrew install kubectl
Docker Desktopdocker.com
argocd CLIbrew install argocd
nucleibrew install nuclei
curl, jq, gitpreinstalado en macOS o brew install jq

Requisitos de recursos: 8GB+ de RAM libre, 15GB+ de disco libre, puertos 30080 / 30081 / 3010 disponibles.


Cómo Ejecutar

Paso 1 — Configurar el entorno vulnerable (ArgoCD v3.2.0)

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

Tarda ~10 minutos. Cuando termine:

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

Paso 2 — Configurar el entorno parcheado para comparación (opcional)

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

Paso 3 — Desencadenar el CVE

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

Salida esperada — vulnerable (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

Salida esperada — parcheado (v3.2.11):

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

Paso 4 — Detección con Nuclei

# Clúster vulnerable → debería producir un hallazgo [critical]
nuclei -t nuclei/CVE-2026-42880.yaml \
  -u http://localhost:30080 \
  -var username=viewer \
  -var password=viewerpass123

# Clúster parcheado → no debería producir hallazgos
nuclei -t nuclei/CVE-2026-42880.yaml \
  -u http://localhost:30081 \
  -var username=viewer \
  -var password=viewerpass123

Paso 5 — Desmontaje

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

Estructura de Directorios

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

Lógica de Detección de la Plantilla de Nuclei

La plantilla utiliza una cadena HTTP de 4 pasos para verificar todos los prerrequisitos del CVE sin desencadenar la extracción real de Secretos:

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
Descargar herramienta