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
- 调用API端点:
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中的存档页面暴露了有效ID,这并非暴力破解而是OSINT
- 已部署修复:如果真是"信息类",本无需修补
经验教训
研究人员:始终检查范围规则——某些项目排除OSINT或第三方存档 组织:当标识值可能被自然分享或存档时,不要依赖"秘密"标识符 社区:信息类与中等严重性之间存在灰色地带,实际利用风险很重要
最终思考
本报告通过HackerOne负责任地提交,Razorpay修复了漏洞,这最终是积极结果。但被分类为信息类引发重要问题:当通过IDOR可能暴露敏感客户数据时,基于OSINT的复现是否应排除其影响力?
我很想听听其他研究人员的想法:这真是信息类漏洞,还是更接近中等/高严重性问题?