这篇文章讲述了我最喜欢的一个漏洞发现,因为它是一个非常出乎意料的问题。
我当时在测试一个电子商务网站。
该网站有两个资产在测试范围内:
target.com 和 admin.target.com。
其中
target.com 是面向用户的门户,用户可以在上面购买商品。
admin.target.com 基本上是卖家的管理门户,卖家可以在上面列出商品、跟踪订单、查看客户信息等。
我当时在测试 IDOR(不安全的直接对象引用)和访问控制。我通常使用 Autorize 工具来进行测试。
如果一个低权限的用户能够访问到管理端点,Autorize 会标记为“绕过”。
我将 target.com 的普通用户 Cookie 放入 Autorize 后,使用 admin.target.com 来检查普通用户是否能够访问管理员端点。
在测试过程中,发生了一些不寻常的事情。
每当我访问以下端点时:
https://admin.target.com/orders
都会触发以下的 GraphQL 请求
POST /graphql
Host: admin.target.com
{"operationName":"GetOrders","variables":{"shop_id":"X"},"query":"query X"}
响应中包含了我店铺的所有订单信息。
这是预期的行为。
然而,奇怪的是,Autorize 将这个端点标记为“绕过”,这意味着即使是普通用户也能够发起这个请求并访问我店铺的订单信息。
但当我将这个请求发送到 Repeater 并尝试使用用户 Cookie 发起请求时,却返回了一个错误。
Autorize 显示“绕过”,而 Repeater 显示“禁止访问”。
我以为这是 Autorize 的一个故障,便继续测试。
整整一周,在测试这个程序时,这种情况一直在发生。
Autorize 一直把 GetOrders 端点标记为“绕过”,但当我将请求发送到 Repeater 测试时,依然返回 403 禁止访问错误。
此时,我确信这不是 Autorize 的问题,应该是我遗漏了什么。
然后我恍然大悟。
Autorize 和 Repeater 唯一的区别是时间间隔。
虽然它们都使用相同的 Cookie/Token,
但 Autorize 会立即调用管理员端点,而我在 Repeater 中发起请求时则需要一些时间。
为了验证我的猜想:
我使用管理员 Token 发起了对 GetOrders 端点的请求。
POST /graphql
Host: admin.target.com
Auth: Bearer admin
{"operationName":"GetOrders","variables":{"shop_id":"X"},"query":"query X"}
然后,我立即使用用户 Token 发起了相同的请求。
POST /graphql
Host: admin.target.com
Auth: Bearer user
{"operationName":"GetOrders","variables":{"shop_id":"X"},"query":"query X"}
事情的真相是:
服务器会将 GetOrders 的响应缓存大约 3 到 4 秒的时间。
所以,如果攻击者在普通商店管理员使用管理门户时,恰好在同一时间发起请求,攻击者就能够通过 shop_id 获取任何商店的所有订单和客户信息。
而 shop_id 是一个公开可访问的 ID。
创建一个简单的 Bash 脚本,持续不断地发起对 GetOrders 端点的请求,
每当管理员访问他们的门户时,订单/客户信息会在 3 到 4 秒的时间窗口内被缓存,从而允许攻击者抓取这些信息,并绕过所有访问控制限制。
我使用我的 Intruder 工具,发起了带有用户 Token 的 GetOrders 请求。
最初由于存在访问控制,返回了 403 禁止访问响应。
与此同时,我以 adminUser 的身份登录了 admin.target.com,并正常访问了 admin.target.com/orders。
在后台,管理员的 GraphQL 请求(GetOrders)被触发,并且响应在 3 到 4 秒内可供缓存。
最终,同一个 Intruder 标签页(刚才还返回了 403 错误)成功地获取到了被缓存的响应。
这个问题被评估为严重漏洞,并在几小时内得到了迅速修复。
奖金令人羡慕,高达2k刀!
如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
缓存漏洞属于相对比较隐蔽的问题,直接成因都是配置不当,如果是接口数据被进行缓存,需要额外注意测试是否可能存在安全问题.最后想说的是,不要成为只会用工具的脚本小子,去理解你的工具工作原理以及运行机制,关注异常情况,细细挖掘!
Thanks for:https://rikeshbaniya.medium.com/authorization-bypass-due-to-cache-misconfiguration-fde8b2332d2d