第一个主要漏洞(漏洞 A): 强制接受行程
这是一个典型的垂直越权漏洞,影响了司机与乘客之间的订单交互流程。
漏洞原理
该漏洞的利用分为两个阶段:
第一阶段 - 参数获取
当司机(rider/driver)向乘客发起报价时,其客户端会向 /api/driverrequest 接口发送一个请求。
攻击者(恶意司机)可以拦截或获取该请求,并从请求参数中拿到两个关键标识:
第二阶段 - 状态篡改
在成功获取上述 tenderID 和 orderID 参数后,攻击者便可绕过乘客侧的操作,自行构造一个请求,直接调用 /api/setTenderStatus 接口,并将订单状态参数 status 设置为 accept。
此操作的直接后果是,即使乘客从未点击“接受报价”,后端系统也会将该订单判定为“司机报价已被乘客接受”。
安全影响
此漏洞的危害性极高。攻击者利用该缺陷,可以强制获取任意乘客的敏感个人信息(PII),例如手机号码等。这一切可以在乘客完全不知情、未同意司机报价的情况下发生。
⚠️ 更重要的是,由于整个攻击流程仅涉及简单的 API 调用,攻击者可以轻易地编写脚本实现实时、自动化攻击,危害范围与程度被显著放大。
PoC(概念验证)
curl https://terra-akamai.indriverapp.com/api/setTenderStatus?cid=5957&locale=en_US&phone=████&token=████████&v=7&stream_id=1682280490209367&tender_id=████████&order_id=█████████&status=accept
第二个漏洞(漏洞 B): 异常报价越界
此漏洞与业务逻辑校验缺失有关,涉及司机报价的价格参数。
漏洞原理
在正常的司机出价流程中,客户端(前端)会对报价金额进行限制(例如,设定一个合理的价格区间)。然而,攻击者可以通过直接向报价接口发送请求,绕过前端的所有校验规则,将 price 参数修改为远超业务允许范围的异常数值(例如极端高价或极端低价)。
后端服务器在接收到此请求后,未能对价格参数进行有效的二次校验,导致系统接受了这个异常的报价。
漏洞组合利用
若将此漏洞与上述的漏洞 A 组合利用,攻击者可实施更具破坏性的攻击链:
- 首先,利用漏洞 B 向目标乘客提交一个极端高昂的报价。
- 然后,利用漏洞 A 强制将该异常报价的状态改为“已接受”。
这种组合拳不仅侵犯了用户的选择权,还可能直接导致用户面临巨大的经济损失,突显了全面进行 API安全 测试与逻辑漏洞挖掘的重要性。
PoC(概念验证)
curl https://terra-akamai.indriverapp.com/api/driverrequest?cid=5957&locale=en_US&job_id=338f72ff-f3c1-4da0-af15-5d1aa720146b&phone=██████████&token=████████&v=7&stream_id=1682279074257167&order_id=██████&client_id=█████████&shield_session_id=██████████&type=indriver&price=63&period=3&geo_arrival_time=1&distance=5&longitude=85.3249627&latitude=27.7390611&sn=1
(注:上述 PoC 中的 price=63 可能在特定场景下已被前端限制,攻击者可通过修改此值为超大或负数来验证越界漏洞。)
总结与反思
这两个漏洞均源于服务端对客户端请求的信任过度,缺乏关键的业务逻辑校验和权限复核机制。对于涉及交易、状态变更和敏感信息的核心接口,开发者必须在服务端实施严格的、不依赖于前端的校验策略,包括但不限于:价格范围校验、订单状态流转合法性校验、以及当前操作用户是否有权修改目标订单的状态。此类问题在 渗透测试 中属于重点检测项,能够有效发现业务深层风险。
参考
|