V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Hozoy
V2EX  ›  信息安全

大麦微信小程序出现越权漏洞?多人被陌生人随意退票

  •  
  •   Hozoy · 1 天前 · 2980 次点击

    近期小红书有多人发帖称自己的票被莫名奇妙退掉,然后后面有网友发现,大麦的微信小程序订单页面截图发给其他人,其他人可以通过微信入口识别并进入到截图对应的订单页面,并且可以操作退款等越权行为。

    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

    并且这个功能还不能关闭,有做小程序的需要注意了。

    19 条回复    2025-04-01 09:58:08 +08:00
    codehz
        1
    codehz  
       1 天前
    合着这玩意校验权限全靠前端啊
    renmu
        2
    renmu  
       1 天前 via Android
    代码的问题,很早之前论坛就有过讨论了
    Hozoy
        3
    Hozoy  
    OP
       1 天前
    @codehz #1 例如,前端直接把 token 拼到链接上了,以为小程序不是网页没人能看到链接
    Hozoy
        4
    Hozoy  
    OP
       1 天前
    @renmu #2 /t/1031676 找了一个一年前的帖子,的确论坛有讨论,不知道大麦这个 bug 出现了多久,这两天讨论的人多了才修复
    hafuhafu
        5
    hafuhafu  
       1 天前
    后端没校验啊...
    bruce0
        6
    bruce0  
       1 天前
    世界就是个大草台班子 再次 +1, 这种最基本的判断 后端都不校验, 有点离谱了
    justfun
        7
    justfun  
       1 天前
    即使微信没这个功能 ,后端不鉴权的话 那我抓包也能越权啊
    Hozoy
        8
    Hozoy  
    OP
       1 天前
    @justfun #7 不是不鉴权,应该只是把 token 啥的带到链接上了
    kyuuseiryuu
        9
    kyuuseiryuu  
       1 天前
    NB ,这个 bug 是想写都不一定写得出来的。这就是所谓的,坏人绞尽脑汁不如蠢人灵机一动吗。
    BigTomato
        10
    BigTomato  
       1 天前
    @kyuuseiryuu 大概率没在后端鉴权,不是 Bug
    kyuuseiryuu
        11
    kyuuseiryuu  
       1 天前
    @BigTomato URL 带的 Token 是对的后端也没办法鉴权啊。后端只能知道 Token 是不是对的,又不能知道 Token 是哪里来的。这明显就是小程序端写的 bug 。
    BigTomato
        12
    BigTomato  
       1 天前
    @kyuuseiryuu 小程序可以通过相关 API 获取用户唯一标识,即使有 Token 不得比对一下当前用户是否和 Token 对应用户相同吗?
    Hozoy
        13
    Hozoy  
    OP
       1 天前
    @BigTomato #12 应该是这个场景小程序开发没考虑到,获取 token 一般是主入口等地方获取,这种子页面可能做的时候偷懒传了一些用户相关的值,包含后端鉴权的值,然后也没有重新获取 token ,就成现在这样了
    coolcoffee
        14
    coolcoffee  
       1 天前
    我感觉是没校验归属用户,比如通过截图知道了这个订单的 uuid ,结果我用我的账号 token 去取消其他人的订单 uuid ,也是可以成功的。
    kyuuseiryuu
        15
    kyuuseiryuu  
       1 天前
    @BigTomato #12 如果用 JWT ,{ uid: 'xxxxx' } 这样的结构去生成一个 token ,验证通过直接就拿这个 payload 里面的 uid 来当作当前请求的用户了。如果要验证这个 token 和请求的用户是不是同一个,那么请求头上面还得加个字段来传当前用户 uid ,如果小程序前端知道在请求头上加东西,也就不会把 token 加在 URL 上面了。
    YJi
        16
    YJi  
       1 天前
    绝了,刚在群里跟群友分享,群友说她朋友的巴奴积分也因为类似 bug 被别人给抽奖抽完了。笑死。
    yafoo
        17
    yafoo  
       1 天前 via Android
    @kyuuseiryuu 小程序不能修改请求头的,所以我们 token 也是放 url 上
    kyuuseiryuu
        18
    kyuuseiryuu  
       21 小时 19 分钟前 via iPhone
    @yafoo 可以改啊,我改过。
    nilaoda
        19
    nilaoda  
       19 小时 45 分钟前
    不是隐水印吧,同样的图你从相册里分享或者复制一张图,就不会有跳转小程序的提示。应该是监听了截图事件,然后内部存储 url 和图片的名称之类的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   952 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:43 · PVG 05:43 · LAX 14:43 · JFK 17:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.