IPBUF安全漏洞报告
English
CVE-2025-61776 CVSS 4.7 中危

CVE-2025-61776:Dependency-Track NuGet仓库凭证泄露漏洞

披露日期: 2025-10-07

漏洞信息

漏洞编号
CVE-2025-61776
漏洞类型
信息泄露/凭证泄露
CVSS评分
4.7 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Dependency-Track

相关标签

CVE-2025-61776Dependency-Track信息泄露凭证泄露NuGet供应链安全中危漏洞.NETAuthorization头泄露

漏洞概述

CVE-2025-61776是Dependency-Track组件分析平台中的一个信息泄露漏洞,该漏洞存在于4.13.5之前的版本中。Dependency-Track是一款用于识别和降低软件供应链风险的开源组件分析平台。漏洞的核心问题在于:当Dependency-Track实例中包含.NET组件、配置了自定义NuGet仓库且该仓库配置了认证凭证时,如果自定义仓库服务器的服务索引(service index)中未提供PackageBaseAddress资源,Dependency-Track可能会将本应发送给私有NuGet仓库的认证凭证(通过HTTP Authorization头)错误地发送至公共的api.nuget.org,同时可能将标记为内部的组件名称和版本信息泄露给api.nuget.org。该漏洞的CVSS评分为4.7,属于中危级别,攻击向量为网络利用,需要用户交互(如触发组件分析扫描),主要影响为机密性的低级别泄露。漏洞已于Dependency-Track 4.13.5版本中修复,官方同时提供了临时缓解措施。

技术细节

从技术层面分析,该漏洞源于Dependency-Track在处理NuGet仓库配置时的逻辑缺陷。NuGet协议规定客户端应首先访问仓库的服务索引(service index)以获取各类资源的URL地址,其中PackageBaseAddress资源指向存储.nupkg包的基地址。当Dependency-Track尝试从自定义NuGet仓库获取组件元数据时,其工作流程如下:

1. 客户端向配置的私有NuGet仓库发送请求,获取服务索引文档;
2. 解析服务索引中的资源地址,包括PackageBaseAddress等关键资源;
3. 使用从服务索引获取的URL进行后续的组件元数据查询和包下载操作。

漏洞触发条件:当私有仓库的服务索引中缺少PackageBaseAddress资源时,Dependency-Track的代码可能回退到一个硬编码的默认URL(即api.nuget.org),但在执行此回退操作时,未能正确清除先前为私有仓库设置的Authorization头信息。这导致原本用于私有仓库认证的凭证被附加到对api.nuget.org的请求中,从而造成凭证泄露。同时,由于请求被路由到公共的NuGet服务,私有组件的查询请求也会将内部组件的名称和版本信息暴露给api.nuget.org。

利用此漏洞需要满足以下条件:(1) Dependency-Track实例中存在.NET组件分析任务;(2) 管理员配置了带有认证凭证的自定义NuGet仓库;(3) 该私有仓库的服务索引不包含PackageBaseAddress资源条目。攻击者可以通过监控api.nuget.org的访问日志或通过中间人攻击捕获泄露的Authorization头来获取私有仓库的凭证,进而访问受保护的私有组件仓库。

攻击链分析

STEP 1
步骤1:环境配置
攻击者需要目标组织部署了Dependency-Track实例,且管理员配置了带有认证凭证的自定义私有NuGet仓库,同时该实例中包含.NET组件的分析任务。
STEP 2
步骤2:触发条件构造
私有NuGet仓库的服务索引(service index)不包含PackageBaseAddress资源条目,这可能是仓库配置错误或故意构造的恶意仓库配置所致。
STEP 3
步骤3:触发组件分析
当Dependency-Track执行组件分析任务时,会向配置的私有NuGet仓库发起请求,获取服务索引以解析资源地址。
STEP 4
步骤4:凭证泄露
由于服务索引中缺少PackageBaseAddress资源,Dependency-Track回退到硬编码的api.nuget.org URL,但未清除Authorization头,导致私有仓库凭证泄露至公共NuGet服务。
STEP 5
步骤5:内部信息泄露
同时,标记为内部的.NET组件名称和版本信息通过请求URL泄露给api.nuget.org,攻击者可通过监控该服务获取敏感信息。
STEP 6
步骤6:凭证利用
获取泄露的凭证后,攻击者可使用这些凭证访问私有NuGet仓库,窃取专有组件和敏感代码,进一步扩大攻击范围。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# 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}")

影响范围

Dependency-Track < 4.13.5

防御指南

临时缓解措施
在升级到4.13.5版本之前,建议采取以下临时缓解措施:(1) 立即禁用所有自定义NuGet仓库配置,停止使用任何私有仓库;(2) 作废之前用于私有NuGet仓库认证的所有凭证(包括用户名密码、API密钥等),防止已泄露凭证被利用;(3) 在补丁应用后,为私有仓库生成全新的认证凭证;(4) 检查私有NuGet仓库的服务索引配置,确保其正确提供PackageBaseAddress/3.0.0资源条目;(5) 审查Dependency-Track的访问日志,排查是否有凭证已泄露至api.nuget.org的迹象。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表