Skip to content

Add Argo CD CVE-2025-55190 environment - #780

Open
moonD4rk wants to merge 7 commits into
vulhub:masterfrom
moonD4rk:add-argocd-cve-2025-55190
Open

moonD4rk wants to merge 7 commits into
vulhub:masterfrom
moonD4rk:add-argocd-cve-2025-55190

Conversation

@moonD4rk

Copy link
Copy Markdown

Description

Add reproduction environment for CVE-2025-55190

ArgoCD's /api/v1/projects/{project}/detailed endpoint returns repository credentials (username, password, SSH key) in plaintext to any caller holding projects, get on the project, bypassing the standard repositories, get permission check.

Severity

  • CVSS 3.1: 9.9 Critical
  • Any user with projects, get can read every repo credential — typically write-access PATs or SSH keys to the GitOps source repo.

Affected Versions

  • >= 2.2.0-rc1 (vulnerable since the endpoint was introduced)
  • Patched in v2.13.9, v2.14.16, v3.0.14, v3.1.2

This lab ships ArgoCD v2.14.15 (last unpatched release on the v2.14 line).

Usage

cd argocd/CVE-2025-55190
docker build -t vulhub/argocd:2.14.15 ../../base/argocd/2.14.15
docker compose up -d
# Wait for bootstrap (first time ~3-5 min)
until docker compose exec k3s test -f /var/lib/vulhub-argocd/initialized; do sleep 5; done && echo "READY"

Reproduction details and credentials in argocd/CVE-2025-55190/README.md.

References

moonD4rk added 7 commits May 16, 2026 20:36
The /api/v1/projects/{project}/detailed endpoint returns plaintext
repository credentials to any caller holding `projects, get`, bypassing
the per-repository RBAC enforced on /api/v1/repositories. The lab ships
Argo CD v2.14.15 with a low-privilege project token to demonstrate the
asymmetry.
The previous commit added `!argocd/` and `!base/argocd/` to .gitignore
to defeat a personal global '*' rule on the contributor's machine.
That workaround is local-environment-specific and shouldn't ship in the
repo; the argocd files are already tracked so removing the overrides
has no effect on tracking.
Inserts a screenshot of the Argo CD sign-in page as 1.png to anchor the
beginning of the UI walkthrough, shifting the existing Repositories list
and project Roles screenshots to 2.png and 3.png. Also shows the
admin-password command's sample output so readers know what the
auto-generated 16-character random string looks like.
The shipped manifest argocd-install-v2.14.15.yaml was 26165 lines, of
which 90% (23551 lines) was OpenAPI schema for Argo CD's three CRDs
(Application, ApplicationSet, AppProject). That bulk made the
contribution hard to review.

Drop the bundled file and have bootstrap.sh apply the manifest from
raw.githubusercontent.com/argoproj/argo-cd/v2.14.15/manifests/install.yaml
at first-container-start. Verified end-to-end: bootstrap completes in
~80 s and the CVE-2025-55190 reproduction still leaks the helm-repo
credentials through /api/v1/projects/myproject/detailed while the
proper /api/v1/repositories endpoint correctly returns an empty list
for the same low-privilege token.
A user with only `projects, get` is the CVE's minimum attacker
per GHSA-786q-9hcg-v9ff; centering the demo on it (instead of a
token read from /etc/) makes the privilege escalation land.
Cut from 3 repos to 2 (helm + git PAT), removed UI perspective 3
section, compressed Environment Setup, added language tags and
inline comments to the shell snippets, and trimmed surrounding
prose. Lab demo is unchanged.
1.png was 2.8 MB; resized to 1600 px wide and re-encoded to 470 KB
to match the size profile of the other two screenshots.
@moonD4rk moonD4rk changed the title Add argocd CVE 2025 55190 Add Argo CD CVE-2025-55190 environment May 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant