ArgoCD weak RBAC → cluster admin via custom Application
ArgoCD installed with the default admin user and broad RBAC. Attacker creates an Application pointing at attacker manifests — ArgoCD syncs them with cluster-admin.
§ Context
Assumed environment: K8s cluster managed by ArgoCD. Default admin credentials never rotated (Bitnami chart leaves them in a secret), or the admin password leaked.
§ Steps
- 01Authenticate (default / leaked admin)Credential AccessW-AUTH-DEFAULT— Default Credentials
- 02Privileged pod runs on the clusterPrivilege EscalationK-PRIV-CONTAINER— Privileged Container Escape
- 03Mount host fs → cluster-adminPrivilege EscalationK-HOSTPATH-MOUNT— hostPath Volume Mount
- 04ArgoCD syncs malicious manifestsPersistenceK-CRONJOB-PERSIST— Malicious CronJob / DaemonSet
- 05Create Application from attacker repoPrivilege EscalationCI-ARGOCD-TAKEOVER— ArgoCD Misconfigured RBAC
- 06Find ArgoCD UI / APIDiscoveryN-NMAP-INTERNAL— Internal Nmap Sweep
§ Frequently asked
- What is the "ArgoCD weak RBAC → cluster admin via custom Application" attack path?
- ArgoCD installed with the default admin user and broad RBAC. Attacker creates an Application pointing at attacker manifests — ArgoCD syncs them with cluster-admin. It chains 6 steps drawn from real-world offensive-security techniques.
- What starting position does this attack require?
- The first step is Authenticate (default / leaked admin) (W-AUTH-DEFAULT) — a credential access primitive. Assumed environment: K8s cluster managed by ArgoCD.
- What is the final impact of this kill-chain?
- The final step lands on Find ArgoCD UI / API (N-NMAP-INTERNAL), which falls under Discovery. From here, an operator typically pivots into post-exploitation or maintains persistence.
- How can defenders detect or prevent this attack?
- Detection and prevention vary per step. Refer to each linked MITRE ATT&CK entry under "References" — every technique on that page lists defensive controls, detection telemetry, and known threat-actor usage.
§ Related dossiers
- Shared techniques3
Docker socket exposed in pod → host root
A workload mounts /var/run/docker.sock for convenience; spawn a container with the host root mounted, then chroot in for root on the node.
- Shared techniques2
Reconfigure MFP LDAP → harvest service-account credentials
Walk up to / network-into the MFP admin web panel (default creds), change the LDAP address-book server to attacker IP — printer immediately re-binds and sends its service-account creds in cleartext.
- Shared techniques2
Jenkins /script Groovy console → RCE → AD
Jenkins script console exposed unauth on the corporate intranet — Groovy 'execute()' = RCE as the Jenkins service account, often a domain user with broad agent access.
- Shared techniques2
Privileged pod escape → cluster admin
GenericWrite on a Deployment in the kube-system namespace lets you launch a privileged pod; the pod mounts the host filesystem and steals the kubeconfig of cluster-admin.
- Shared techniques2
CVE-2024-21626 (Leaky Vessels) → container escape
Outdated runc lets a malicious image escape during 'docker build' or 'docker run' via a leaked file descriptor pointing at the host filesystem.