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