近期小红书有多人发帖称自己的票被莫名奇妙退掉,然后后面有网友发现,大麦的微信小程序订单页面截图发给其他人,其他人可以通过微信入口识别并进入到截图对应的订单页面,并且可以操作退款等越权行为。
https://i.imgur.com/PnY1uWj.jpeg https://i.imgur.com/SV9AuCZ.jpeg https://i.imgur.com/Kuh7qRi.jpeg
截止到目前,多位网友称此越权漏洞已经被修复。
盲猜一手,微信小程序在截图的时候会加上可识别的盲水印,并且指向当前小程序的链接,并且这个链接大麦在做的时候可能带有用户授权信息,在其他人识别进入这个链接后,直接获得订单号主权限,然后达到越权的实现。
随便一搜,微信的这个功能很多人都反馈,如果没有特殊处理会有越权问题: https://developers.weixin.qq.com/community/develop/doc/00082e6e1908405c24b2ea5ff61000?highLine=%25E6%2588%25AA%25E5%259B%25BE%25E8%25AF%2586%25E5%2588%25AB
并且这个功能还不能关闭,有做小程序的需要注意了。
![]() | 1 codehz 201 天前 合着这玩意校验权限全靠前端啊 |
2 renmu 201 天前 via Android 代码的问题,很早之前论坛就有过讨论了 |
4 Hozoy OP @renmu #2 /t/1031676 找了一个一年前的帖子,的确论坛有讨论,不知道大麦这个 bug 出现了多久,这两天讨论的人多了才修复 |
![]() | 5 hafuhafu 201 天前 后端没校验啊... |
![]() | 6 bruce0 201 天前 世界就是个大草台班子 再次 +1, 这种最基本的判断 后端都不校验, 有点离谱了 |
![]() | 7 justfun 200 天前 即使微信没这个功能 ,后端不鉴权的话 那我抓包也能越权啊 |
![]() | 9 Chemist 200 天前 NB ,这个 bug 是想写都不一定写得出来的。这就是所谓的,坏人绞尽脑汁不如蠢人灵机一动吗。 |
10 BigTomato 200 天前 @kyuuseiryuu 大概率没在后端鉴权,不是 Bug |
![]() | 11 Chemist 200 天前 @BigTomato URL 带的 Token 是对的后端也没办法鉴权啊。后端只能知道 Token 是不是对的,又不能知道 Token 是哪里来的。这明显就是小程序端写的 bug 。 |
12 BigTomato 200 天前 @kyuuseiryuu 小程序可以通过相关 API 获取用户唯一标识,即使有 Token 不得比对一下当前用户是否和 Token 对应用户相同吗? |
13 Hozoy OP @BigTomato #12 应该是这个场景小程序开发没考虑到,获取 token 一般是主入口等地方获取,这种子页面可能做的时候偷懒传了一些用户相关的值,包含后端鉴权的值,然后也没有重新获取 token ,就成现在这样了 |
14 coolcoffee 200 天前 我感觉是没校验归属用户,比如通过截图知道了这个订单的 uuid ,结果我用我的账号 token 去取消其他人的订单 uuid ,也是可以成功的。 |
![]() | 15 Chemist 200 天前 @BigTomato #12 如果用 JWT ,{ uid: 'xxxxx' } 这样的结构去生成一个 token ,验证通过直接就拿这个 payload 里面的 uid 来当作当前请求的用户了。如果要验证这个 token 和请求的用户是不是同一个,那么请求头上面还得加个字段来传当前用户 uid ,如果小程序前端知道在请求头上加东西,也就不会把 token 加在 URL 上面了。 |
![]() | 16 YJi 200 天前 绝了,刚在群里跟群友分享,群友说她朋友的巴奴积分也因为类似 bug 被别人给抽奖抽完了。笑死。 |
![]() | 17 yafoo 200 天前 via Android @kyuuseiryuu 小程序不能修改请求头的,所以我们 token 也是放 url 上 |
19 nilaoda 200 天前 不是隐水印吧,同样的图你从相册里分享或者复制一张图,就不会有跳转小程序的提示。应该是监听了截图事件,然后内部存储 url 和图片的名称之类的。 |