Hozoy

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

  •  
  •   Hozoy · Mar 31, 2025 · 4984 views
    This topic created in 421 days ago, the information mentioned may be changed or developed.

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

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