[典型漏洞分享]多线程同步问题导致越过程序限制

在涉及到钱的问题时,多线程同步问题一定要重点考虑,如果处理不当可能造成无法预料的损失。

YS 电商优惠券漏洞可以使一张优惠券被多次使用来生成订单【高】

问题描述:

         用户在YS电商可以使用我们提供的优惠券购买设备,并得到一定金额的优惠,一张优惠券只能使用一次,在提交生成订单的接口时需要带上该优惠券号码,后台系统会根据该优惠券的类型自动减少额度并最终生成订单,但该接口在后台未做并发同步处理,导致一张优惠券可以使用多次并最终生成多个用于支付的订单。

测试步骤:

1、  登录YS MALL,选择需要购买的设备CX(此处CX价格为880,优惠券优惠额度为300RMB),并进入购物车提交订单,如图所示:

clip_image002

2、  在订单信息中使用使用优惠券,如下图所示:

clip_image004

clip_image006

3、  提交订单并拦截生成订单请求,转入burp intruder,设置相关参数后,发起快速请求,可以看到有4个请求被成功处理,如图所示:

clip_image008

4、  转入“我的订单”页面,可以看到成功生成4个订单,并且每个订单都成功地使用了同一个优惠券,如下图所示:

clip_image010

5、  查看后台优惠券使用记录也验证了这一点,如图:

clip_image012

问题扩展:

         理论上所有的接口都有可能出现此类问题,对于牵涉到敏感业务的接口可能会造成不可预料的后果。

解决建议:

1、  处理代码增加同步锁做并发同步处理。

原文地址:https://www.cnblogs.com/fishou/p/4201968.html