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

himarket BOPLA VULNs Report

Issue 1:GET /attachments/{attachmentId}

(对象级读取缺失检查候选,最终裁决:非漏洞)

1. 风险分析

该接口在读取附件时未显式校验 chat_attachment.user_id,理论上可能导致跨用户附件读取。一旦攻击者获取他人 attachmentId,可直接获取附件原始内容。

但该风险是否成立依赖于 ID 泄露面及系统整体访问模型,当前证据不足以证明可稳定利用。


2. 漏洞信息

  • 接口: GET /attachments/{attachmentId}

  • 候选问题:

    • (read, chat_attachment.user_id)
    • (read, chat_attachment.data)

3. 核验细节

  • 入口授权:

    • @AdminOrDeveloperAuth(仅校验身份类型)
    • 无对象归属校验
    • AttachmentController.java:44-58
  • Sink:

    • ChatAttachmentServiceImpl.getAttachmentDetail()
    • 直接按 attachmentId 查询并返回 data
    • ChatAttachmentServiceImpl.java:104-123
  • Owner 字段存在:

    • 上传时写入 chat_attachment.user_id
    • ChatAttachmentServiceImpl.java:57-68
  • 缺失点:

    • 查询路径未使用 user_id 进行约束
  • 对照防线:

    • ChatSessionServiceImpl.findUserSession():绑定 user 查询
    • ConsumerServiceImpl.findDevConsumer():绑定 user 查询
    • 附件路径缺少同类约束

4. 安全建议

(防御性优化建议)

  • 查询时增加:

    WHERE attachment_id = ? AND user_id = currentUserId
    
  • 若存在跨用户访问需求,应显式建模授权关系(如分享/引用)

  • 增加访问日志,便于审计异常访问


Issue 2:GET /developers/oidc/callback

(高风险:跨 Portal 身份复用 / 租户隔离失效)

1. 风险分析

系统在 OIDC 登录回调中复用了全局外部身份(provider + subject),而未校验其所属 portalId
这会导致攻击者在一个 Portal 的合法 developer 身份,被跨 Portal 复用,从而绕过注册审批和租户隔离。

最严重影响:

  • 绕过 Portal 独立账号体系
  • 未经审批访问敏感 API
  • 在目标 Portal 中创建资源并订阅产品

2. 漏洞信息

  • 接口: GET /developers/oidc/callback

  • 问题类型:

    • (authenticate, developer.portal_id)

3. 核验细节

入口阶段

  • OidcServiceImpl.handleCallback()

    • 基于当前 portal 配置完成 OIDC 验证
    • OidcServiceImpl.java:96-123

Sink(关键问题)

  • createOrGetDeveloper()

    developerService.getExternalDeveloper(provider, subject)
    
  • 仅按 (provider, subject) 查找

  • 未校验:

    developer.portal_id == current_portal
    

相关代码:

  • DeveloperServiceImpl.java:202-207
  • DeveloperExternalIdentity.java:27-33(唯一键不含 portalId)

Token 发放

  • TokenUtil.generateDeveloperToken(developerId)
  • JWT 不包含 portalId
  • TokenUtil.java:95-106

后续生效点

  • 业务逻辑中:

    • developerId 来自 token
    • portalId 来自当前请求上下文

典型混写路径:

  • ConsumerServiceImpl.createConsumer()

    • 写入 (developerId=devA, portalId=portalB)
    • ConsumerServiceImpl.java:101-121
  • 查询路径:

    • getPrimaryConsumer() 仅按 developerId
    • ConsumerServiceImpl.java:760-789

对照防线

  • 内建账号登录:

    • (portalId + username) 绑定
    • DeveloperServiceImpl.java:104-130
  • 外部身份登录:

    • ❌ 缺少 portal 维度约束

4. 安全建议

核心修复点

在复用 developer 前强制校验:

developer.portalId == contextHolder.getPortal()

补充修复建议

  1. 唯一约束调整

    (provider, subject, portalId)
    
  2. Token 绑定租户

    • 在 JWT 中加入 portalId
    • 所有请求校验 token.portalId == 当前 portal
  3. 隔离策略

    • 禁止跨 portal 复用 developer
    • 或明确建模“多 portal 共享身份”

Issue 3:POST /developers/oauth2/token

(与 Issue 2 同根因:跨 Portal 身份复用)

1. 风险分析

OAuth2 JWT Bearer 登录路径与 OIDC 回调共享同一缺陷:
认证成功后复用全局 developer,而非按 portal 隔离,导致跨租户身份混用。


2. 漏洞信息

  • 接口: POST /developers/oauth2/token

  • 问题类型:

    • (authenticate, developer.portal_id)

3. 核验细节

  • OAuth2ServiceImpl.authenticate()

    • 校验 assertion(基于 portal 配置)
  • createOrGetDeveloper()

    • 同 Issue 2,复用全局 developer
  • 关键缺失:

    • 未校验 developer.portal_id

4. 安全建议

与 Issue 2 完全一致:

  • 强制校验 portal 归属
  • token 绑定 portalId
  • 外部身份唯一键引入 portal 维度

总体结论

本组问题核心可抽象为:

跨租户身份绑定缺失(Cross-Tenant Identity Binding Failure)


模式特征

  1. 入口完成认证(OIDC / OAuth2)
  2. 外部身份映射为本地用户
  3. ❌ 未绑定租户(portalId)
  4. ❌ token 未携带租户信息
  5. ❌ 后续请求依赖“当前上下文”而非“登录上下文”

可抽象为检测规则

Source:external identity authentication (OIDC / OAuth2)Sink:local user lookup or creationMissing:tenant binding (portalId)Pattern:(provider, subject) → global userinstead of(provider, subject, tenant) → scoped user
http://www.jsqmd.com/news/764083/

相关文章:

  • 通达信缠论自动化工具:3步实现专业级技术分析终极指南
  • 陕西中坤羽衡环保:麟游环氧防腐涂料生产推荐几家 - LYL仔仔
  • HoRNDIS:让Mac电脑无缝使用Android手机USB网络共享
  • 2026年4月目前质量好的发光字制作公司推荐,发光字/形象墙导视牌/精神堡垒/厂区安全标识牌,发光字制作商选哪家 - 品牌推荐师
  • 跑遍西宁回收圈,福正美凭啥让我回头三次还带人 - 福正美黄金回收
  • 微信小程序订阅消息发送失败?从模板ID、触发器到云函数,一份完整的排错指南
  • 2026年必装!OpenClaw(小龙虾)Windows一键部署实战:3分钟拥有你的AI数字员工
  • VR-Reversal终极指南:免费开源工具实现3D/VR视频到2D的无缝转换
  • 2026最新广州学车品牌推荐!广州优质权威榜单发布,靠谱省心本地驾校值得选 - 十大品牌榜
  • 国内可程式恒温恒湿试验机怎么选?巨亚结构设计与泰康压缩机配置全面解读 - 品牌推荐大师
  • 甘肃鸿旺发资源回收:西固正规的配电柜回收找哪家 - LYL仔仔
  • Docker Run的隐藏玩法:把Ubuntu容器变成你的专属Linux命令沙盒(Debian也适用)
  • 拒绝“能跑就行“:为 AngularJS .x 老项目注入现代开发体验
  • 视频号视频怎样保存到手机相册?微信视频号视频下载方法 2026 实测指南 - 科技热点发布
  • 2026年南昌乱账整理多少钱 | 完整价格体系深度解析 - 资讯焦点
  • 暗黑2重制版终极自动化MF脚本Botty:24小时高效刷宝完整指南
  • 从MovieLens数据里,我们发现了哪些有趣的用户行为?—— 一份给产品经理的数据洞察报告
  • SSH终端集成AI助手:提升运维效率的智能命令行解决方案
  • 抠图怎么抠出来?2026年最全AI抠图工具对比指南
  • 《给OpenClaw装上多模态感知,打造专属端侧智能协作体》
  • ComfyUI插件管理完全指南:从安装到故障排除的实用教程
  • 【含五月最新安装包】OpenClaw保姆级一键部署全流程
  • 2025网盘下载革命:LinkSwift直链助手颠覆你的下载体验
  • B站视频转文字终极指南:3分钟学会用免费AI工具高效提取视频内容
  • #2026最新铁道运输服务学校推荐!国内优质权威榜单发布,口碑靠谱湖南华中等地学校值得选 - 十大品牌榜
  • 视频号视频怎么下载?如何快速保存视频号内容?2026最新下载方法盘点 - 科技热点发布
  • 露营烧烤买精酿哪个外卖平台最合适?酒水大额券领取攻略一文看懂 - 资讯焦点
  • 从‘天链’到‘北斗’:一文看懂中国在3.6万公里高空的卫星‘朋友圈’(附完整清单)
  • 【论文解读】U-Mamba: Enhancing Long-range Dependency for Biomedical Image Segmentation
  • 视频号视频怎样下载到手机?2026年最新方法全测评 - 科技热点发布