QR码IDOR漏洞在Razorpay中的发现与分析
漏洞概述
本文介绍我在Razorpay的QR码支付系统中发现的IDOR(不安全的直接对象引用)漏洞,该漏洞已通过HackerOne平台报告。目标是分享我的发现过程,记录漏洞细节,并听取安全社区对漏洞分类的意见。
漏洞详情
Razorpay API端点:
|
|
当提供有效的qr_id时,该端点返回敏感的客户支付详情,包括:
- UPI ID
- 账户标识符
- 时间戳
- 交易历史记录
实际上:只要拥有qr_id,就能在未经适当授权的情况下检索客户交易数据。
qr_id的获取方式
公开暴露:QR码本应由商户共享(在YouTube演示等场景中展示)。
OSINT存档:使用Wayback Machine,我发现了包含有效qr_id值的已存档Razorpay仪表板页面。
这表明qr_id并不像声称的那样保密。一旦暴露,攻击者就可以滥用它。
漏洞复现
- 从公开共享的QR码或存档的Razorpay页面获取qr_id
- 调用端点:
GET /merchant/api/live/payments/qr_codes/{qr_id}/payments
- API返回包含多个客户支付详情的JSON响应
|
|
这明显是信息泄露的IDOR漏洞证据。
Razorpay的响应
Razorpay承认了该问题并部署了修复(端点现在返回错误):
|
|
但在审查后,他们在HackerOne上将报告关闭为"信息类"。
他们的理由:
- qr_id是高熵标识符,旨在保持机密
- 商户有责任保护它
- 基于OSINT/Wayback的发现不在其项目范围内
我的观点
虽然我尊重他们的立场,但我认为严重性更高:
设计缺陷,非商户错误:QR码本质上是公开的。假设qr_id保密是薄弱的设计。
敏感数据泄露:客户支付详情直接暴露——不仅仅是元数据。
现实世界可发现性:Wayback Machine中存档的Razorpay仪表板页面暴露了有效ID。这不是暴力破解,而是OSINT。
已部署修复:如果真是"信息类",就没有必要修补。
经验教训
研究人员:始终检查范围规则——有些项目排除OSINT或第三方存档。
组织:当这些值自然共享或可能被存档时,不要依赖"秘密"标识符。
社区:信息类和中等严重性之间存在灰色地带。现实世界的利用风险很重要。
最终想法
此报告通过HackerOne负责任地提交。Razorpay修复了弱点,这最终是积极的结果。
但将其分类为信息类为社区提出了一个重要问题:👉 当敏感客户数据可能通过IDOR暴露时,基于OSINT的复现是否应排除其影响力?
我很想听听其他研究人员的想法。这真的是信息类,还是更接近中等/高严重性问题?