当前位置: 首页 > news >正文

free-fs BOPLA VULNs Report

下面是整理后的Issue 1:文件分享创建越权(跨用户文件绑定)

1. 风险分析

攻击者只需获取任意他人 fileId,即可将该文件加入自己的分享中并对外传播,最终导致跨用户文件泄露、未授权下载,甚至形成稳定的二次扩散链路。

2. 漏洞信息

  • 接口: POST /apis/share/create

  • 缺失校验: file_info.user_id

3. 核验细节

  • 入口仅校验登录态
    FileShareController.java:58-63

  • 创建分享时,直接将 cmd.fileIds 写入 file_share_item,未校验归属
    FileShareServiceImpl.java:115-156

  • 落库仅执行 (share_id, file_id) 插入
    FileShareItemServiceImpl.java:18-26

  • 后续读取/下载直接信任该绑定关系
    FileShareServiceImpl.java:247-287

本质问题:入口只验证“能否创建分享”,未验证“是否有权限分享这些文件”。

4. 安全建议

  • 入库前批量校验:file_info.user_id == currentUserId

  • 校验文件状态(可分享性)

  • 读取/下载路径增加防御性归属校验

  • 校验失败整体拒绝并记录审计日志


Issue 2:分享读取未执行约束(口令/过期/次数失效)

1. 风险分析

所有分享约束(提取码、过期时间、访问次数、scope)均未在读取路径生效,导致受限分享退化为无保护公开分享

2. 漏洞信息

  • 接口: GET /apis/share/{shareId}/items

  • 缺失校验:

    • file_share.shareCode

    • file_share.expireTime

    • file_share.maxViewCount

    • file_share.scope

3. 核验细节

  • 入口为公开读取接口
    FileShareController.java:85-89

  • 仅校验分享存在
    FileShareServiceImpl.java:247-267

  • verifyShareCode 未产生持久验证状态
    FileShareServiceImpl.java:205-222

  • 前端提示字段未参与授权决策
    FileShareServiceImpl.java:225-243

4. 安全建议

  • 统一实现“分享访问授权校验逻辑”

  • 强制校验:

    • 提取码验证状态

    • 是否过期

    • 访问次数限制

    • scope 合法性

  • 校验结果必须绑定服务端状态(session/token)


Issue 3:分享下载未执行约束(直接文件流泄露)

1. 风险分析

攻击者仅凭 shareId 即可绕过所有分享限制直接下载文件,导致受限分享完全失效,可被批量枚举与下载。

2. 漏洞信息

  • 接口: GET /apis/share/{shareId}/download/{fileId}

  • 缺失校验:

    • shareCode

    • expireTime

    • maxDownloadCount

    • scope

3. 核验细节

  • 仅校验 fileId 属于 shareId
    FileShareServiceImpl.java:270-295

  • 未校验任何分享约束字段

4. 安全建议

  • 下载路径必须复用统一授权校验逻辑

  • 严格执行所有分享限制条件

  • 禁止直接基于 (shareId, fileId) 返回文件流


Issue 4:分享详情与访问记录越权读取

1. 风险分析

任意登录用户可读取他人分享详情、提取码及访问记录,造成敏感信息泄露与用户隐私暴露。

2. 漏洞信息

  • 接口:

    • GET /apis/share/{shareId}

    • GET /apis/share/{shareId}/access/records

  • 缺失校验: file_share.user_id

3. 核验细节

  • 仅按 shareId 查询
    FileShareServiceImpl.java:92-110

  • 返回包含 shareCode

  • 访问记录未校验归属
    FileShareAccessRecordServiceImpl.java:32-35

4. 安全建议

  • 强制校验 file_share.user_id == currentUserId

  • 非所有者禁止返回:

    • shareCode

    • 访问日志

  • 敏感字段最小化暴露


Issue 5:文件读取全链路越权(含未认证读取面)

1. 风险分析

攻击者可通过猜测或枚举 fileId/dirId 获取文件元数据、下载地址或直接读取文件内容,部分接口甚至无需认证。

2. 漏洞信息

  • 接口:

    • /apis/file/{fileId}

    • /preview/**

    • /api/file/stream/**

  • 缺失校验: file_info.user_id

3. 核验细节

  • 所有路径均:

    • getById → 直接返回

  • /preview/**/stream/** 无认证保护

4. 安全建议

  • 所有读取统一校验:
    file_info.user_id == currentUserId

  • 分享场景必须走独立授权链路

  • 预览与流接口纳入认证与授权控制


Issue 6:文件写操作越权(删除/重命名/移动)

1. 风险分析

攻击者可越权修改他人文件,导致目录结构破坏、文件丢失或数据篡改。

2. 漏洞信息

  • 接口:

    • 删除、重命名、移动接口

  • 缺失校验: file_info.user_id

3. 核验细节

  • 先查询再更新,未校验归属:

    • 删除:批量更新

    • 重命名:直接 update

    • 移动:批量 update

4. 安全建议

  • 所有写操作强制校验归属

  • 改为:
    WHERE id = ? AND user_id = currentUserId

  • 校验失败拒绝操作


Issue 7:SSE 通道劫持(未认证用户订阅)

1. 风险分析

攻击者无需登录即可订阅任意用户 SSE 通道,实时获取文件传输信息,造成隐私泄露与任务情报暴露。

2. 漏洞信息

  • 接口: GET /apis/transfer/sse

  • 缺失校验: request_user.id → sse.userId

3. 核验细节

  • 明确绕过登录拦截

  • userId 由客户端直接传入

  • 作为 SSE 连接标识使用

4. 安全建议

  • 强制认证

  • userId 必须由服务端派生

  • 推送时校验用户绑定关系


Issue 8:文件传输任务接管(taskId 越权)

1. 风险分析

攻击者获取 taskId 后可完全接管传输任务,实现数据篡改、劫持或泄露。

2. 漏洞信息

  • 接口: 所有 transfer 相关接口

  • 缺失校验: file_transfer_task.user_id

3. 核验细节

  • 所有操作均仅依赖 taskId

  • 查询任务未按用户过滤

  • Issue 7 可提供 taskId 泄露

4. 安全建议

  • 所有操作改为:
    taskId + currentUserId

  • 强制校验任务归属

  • 禁止将 taskId 作为唯一凭据


Issue 9:订阅套餐管理权限缺失

1. 风险分析

若接口未限制为管理员使用,攻击者可篡改全局计费策略,造成业务与资金风险。

2. 漏洞信息

  • 接口: 订阅套餐 CRUD

  • 缺失校验: 管理员权限

3. 核验细节

  • 无角色/权限校验

  • 仅校验业务约束

4. 安全建议

  • 增加管理员角色校验

  • 关键操作记录审计日志


总体结论

该系统存在一类高度一致的安全问题模式:

对象级访问控制缺失(Broken Object-Level Authorization / IDOR)

核心问题可以归纳为三点:

  1. 入口只做“是否登录/是否有功能权限”校验

  2. 未在 sink 处校验对象归属(user_id / tenant_id)

  3. 将 ID(fileId / shareId / taskId)当作授权凭据

http://www.jsqmd.com/news/763624/

相关文章:

  • 从Matlab仿真到嵌入式C代码:雷达CFAR加速核的实战配置与参数调优指南
  • 【边缘AI场景Docker调优白皮书】:基于Raspberry Pi 5/JeVois-Bin/NVIDIA Jetson实测数据的12项关键参数配置清单
  • 音频重采样(Audio Resampling)实现指南
  • 别再一个个部署模型了!用Xinference在AutoDL上一次性搞定Embedding、Rerank和Qwen(附完整命令清单)
  • AI 英语伴学 APP的开发
  • 量子网络模拟中的张量网络技术与应用
  • 新手猫粮创业者的避坑指南与成功攻略
  • 【前端(十三)】JavaScript 数组与字符串笔记
  • Mac mini 从零开始:新建隔离用户 + 完整安装 Hermes Agent
  • 别再只会用等号了!C++ vector赋值,swap和assign到底哪个更快?
  • 程序化噪声在游戏开发中的应用:从Perlin到Shader实战
  • Barlow字体超级家族:如何用一个开源字体解决你的多平台设计统一难题
  • 效率提升:用快马ai一键生成winutil多模块工具箱代码框架
  • Golden UPF Flow实战解析:如何用一份UPF搞定RTL到门级的低功耗验证
  • LIDA:基于大语言模型的自然语言数据可视化代码生成工具
  • 5个常见游戏控制器兼容性难题:XOutput如何让旧手柄在现代游戏中重获新生
  • Obsidian BMO Chatbot:在笔记软件中集成AI助手的配置与实战指南
  • 为Alexa注入ChatGPT灵魂:智能语音助手开发实战指南
  • Windows右键菜单管理终极指南:5分钟掌握系统级菜单定制
  • C++链表学习心得
  • 别再死记硬背了!用Multisim仿真带你直观理解运放负反馈的三大魔法(增益、带宽、阻抗)
  • JESD204B同步实战:在Vivado里配置Xilinx IP核时,这几个参数千万别设错
  • 终极窗口控制指南:如何用WindowResizer强制调整任意窗口尺寸
  • 【软考高级架构】论文范文06——论DDD领域驱动设计及其应用
  • Opus 4.7 + GPT-5.5“双核驱动”——2026最强AI编程工作流实测
  • 考研数学救命稻草:一阶和二阶微分方程的通解公式,我帮你整理好了(附880/660真题解法)
  • 数据分析新手福音:告别复杂spss安装,用快马ai轻松入门统计
  • AI编码助手安全技能集成:vt、gakido等工具实战指南
  • 大模型应用开发入门:收藏!Java开发者如何精准转型,HR眼中的认知误区与你的优势
  • 5分钟掌握网盘直链下载:告别限速与强制客户端的神器