|
微信小程序的微信漏洞扫描,本质上是小程序漏一场猫鼠游戏。攻击者不需要多高深的洞扫技术,他们往往就蹲在开发者最容易忽视的微信角落——云开发环境的默认配置、未校验的小程序漏openid、或者一个忘了加密的洞扫缓存字段。 我见过最典型的微信案例,是小程序漏个做社区团购的小程序。开发者图省事,洞扫把管理员接口的微信鉴权逻辑写在了一个单独的JS文件里,注释还写着“仅供测试”。小程序漏结果扫描器顺着静态资源路径一爬,洞扫直接拿到了完整的微信管理员API列表。更离谱的小程序漏是,这些接口居然没有做referer校验,洞扫攻击者用curl就能模拟请求,把商品价格改成0.1元下单。整个漏洞链,从发现到利用,用不了一包烟的时间。 扫描工具能帮我们找到这类问题,但别指望它全知全能。主流的扫描器,像腾讯云的小程序安全扫描服务,或者开源的wappalyzer配合自定义规则,它们擅长抓两类东西:一类是前端代码里的敏感信息泄露,比如硬编码的AppSecret、云函数地址;另一类是明显的越权请求,比如通过修改data-openid参数尝试访问他人数据。但说实话,这类工具对业务逻辑漏洞往往无能为力——比如一个“领取优惠券”接口,它不会知道这个券本来只能领一次,而你通过并发请求领了100次。 有个细节容易被忽略:小程序的漏洞扫描和传统Web扫描不一样。小程序代码包是加密的,但解密密钥就藏在微信客户端的so文件里,网上随便一搜就能找到现成脚本。扫描器要做的第一步,其实是先把小程序包拉下来解包,然后分析app.json里的页面路由,再针对每个页面的JS逻辑做静态污点分析。这活儿挺枯燥,但确实有效。 我自己做扫描的时候,遇到过一件挺讽刺的事。某个金融类小程序,把用户手机号、身份证号存在了本地storage里,理由是“方便用户下次登录免输入”。扫描器报出这个风险后,开发团队第一反应不是修,而是问“那用户下次登录会不会麻烦?”——你看,在业务压力面前,安全往往排在最后。但后来他们还是改了,因为监管抽查时发现这个漏洞,直接罚了20万。 所以你看,扫描工具的价值不在于它报了多少漏洞,而在于它能不能帮你把“安全债”提前还掉。真正靠谱的扫描流程,应该是自动化扫描加人工渗透测试的组合。自动扫描负责广撒网,把低垂的果实摘了;人工负责深挖那些需要业务理解才能发现的漏洞,比如支付金额篡改、拼团人数伪造。 最后说个实在的。如果你是小程序开发者,别等到上线前才扫描。每一版迭代都跑一遍,把扫描结果接入到CI/CD流程里,让漏洞在合并代码时就报警。这比事后补救省心得多——毕竟,被微信官方下架一次,损失的可不只是几个夜晚的加班。 |