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