一条微信消息,实现客户端持久化攻击

从白宫幕僚到战地记者,即时通讯软件(IM)是无数关键人群不可或缺的沟通工具。无论是 WhatsApp、Telegram,还是微信、QQ,它们已经成为现代社会的 " 数字血管 ",承载着数十亿用户的社交、支付与办公等核心业务,其安全性直接关联个人隐私、金融资产,乃至国家安全。

事实上,关于 IM 的安全研究早已展开。2019 年 Project Zero 披露了 iMessage 中的 CVE-2019-8641 漏洞 [ 1 ] ,该漏洞是一个内存破坏问题。iMessage 会自动解析消息中的富媒体内容,攻击者仅需发送恶意构造的文件,即可在无需用户交互的情况下实现远程代码执行,完全控制目标 iPhone 设备。

DARKNAVY 将在本文中以微信为例,从 URL 解析、文件处理、网页访问等典型场景出发,系统梳理即时通讯客户端的关键攻击面,剖析攻防背后的博弈。

IM 攻击面概览

从体系架构出发,即时通讯软件的攻击面可划分为三个主要维度,分别是客户端层面、通信协议层面以及云端服务层面。本文将重点分析客户端的攻击面,探讨其中可能导致远程代码执行或敏感信息泄露的安全问题。

1 URL 链接

多数 IM 客户端支持自定义协议(如   weixin://、tg://)以实现应用内跳转,然而,攻击者可借助构造伪装为合法链接的恶意请求,利用客户端对 URL 校验不严的漏洞诱导用户访问钓鱼站点。更具隐蔽性的是对一些特殊功能 URL 的滥用。例如,slack://settings 可以实现更改设置的功能,攻击者通过构造特定参数的链接并诱导用户点击,可以实现数据窃取 [ 2 ] 。

使用 weixin:// 协议打开微信

2   文件解析

为提升用户体验,IM 客户端通常集成自有文件解析逻辑以实现格式预览与内容提取。攻击者可通过构造特制的恶意文件,利用解析功能的漏洞实现远程代码执行。例如,CVE-2019-11932 [ 3 ] 和 CVE-2025-30401 [ 4 ] 分别是 WhatsApp Android 客户端和 Windows 客户端中的严重漏洞,前者通过恶意 GIF 文件触发攻击,后者则通过伪装成图像的可执行文件诱导用户执行。

3 内置浏览器组件

多数 IM 客户端内置浏览器以支持网页访问,通常采用基于 Chrome 的自定义内核。其攻击面主要集中在两类技术路径上:

一是 JSBridge,若客户端未对暴露给网页接口进行精细化权限控制,则可能被恶意网页调用实现权限滥用;

二是浏览器内核漏洞,例如,DARKNAVY 团队于 2023 年发布的预警 [ 5 ] 中指出,源于 Chromium 内核中 libwebp 组件的漏洞 CVE-2023-41064 & 4863,影响包括微信、钉钉、QQ 在内的多个主流 IM 软件。

CVE-2023-41064 & 4863 漏洞影响 Windows 平台微信客户端

4   小程序生态

为拓展服务边界,微信、钉钉等 IM 客户端纷纷开放小程序平台,赋予第三方开发者丰富的系统权限,如文件系统访问、传感器调用、API 接口使用等。然而,若客户端在权限管理或功能实现上存在疏漏,攻击者可借助恶意小程序实施攻击。

微信攻击面分析

DARKNAVY 团队对微信客户端的攻击面进行了初步调研,下面将从多个维度介绍微信客户端面临的主要安全风险及其应对机制。

1 微信 URL 链接

微信客户端内置了调试链接机制,当用户访问的 URL 中包含   debugxweb.qq.com   时,会根据 URL 中的参数触发不同调试行为。例如,传入参数   show_webview_version   可在页面上展示当前 WebView 内核的版本信息及相关配置。

show_webview_version 展示的版本信息

尽管该机制为调试带来便利,但若攻击者构造恶意 URL 并诱导用户访问,可能在无用户感知的情况下触发高风险操作,如版本回退或配置变更。为降低风险,微信客户端限制了   install_embed_plugin   等敏感操作仅可在开启   bEnableLocalDebug   选项后执行。同时,对于如   set_config_url   等可修改获取配置 URL 的功能,微信也加入了严格的域名与协议校验,仅允许使用 HTTPS 且域名限定为   dldir1.qq.com   或   dldir1v6.qq.com,有效规避了配置被篡改的风险。

set_config_url 等功能的 URL 校验

此外,微信支持   weixin://   协议实现内部跳转,例如   weixin://dl/   用于页面导航。对于带   ticket   参数的链接,微信客户端会通过   /cgi-bin/mmbiz-bin/translatelink   接口向云端请求真实跳转地址,从而避免攻击者伪造链接诱导用户访问任意页面,有效增强了链接跳转的安全性。

2   微信内置浏览器组件(XWEB)

安卓微信使用自研的 XWEB 内核,基于 Chromium 开发。截止本文编辑时,内核开发版的 Chromium 版本是 134.0.6998.136,而现网版本是 130.0.6723.103,而 Chrome 官方浏览器的版本是 136.0.7103.93。XWEB 保持了相对领先的内核版本,不过仍存在一定的滞后性,有可能受未修复的公开漏洞影响。

为提升浏览器安全性,微信默认启用了多进程沙箱机制。主进程运行在   xweb_privileged_process_0,而渲染进程则隔离于   xweb_sandboxed_process_0,有效缓解了对渲染进程漏洞的攻击利用。

安卓微信客户端的进程隔离

微信还提供了丰富的 JSBridge 接口供网页调用原生功能,例如   sendEmail   可唤起客户端发邮件、scanQRCode   可调用摄像头扫描二维码。

使用 sendEmail 进入发邮件界面

为防止滥用,微信客户端在加载网页时会根据 URL 向云端请求权限列表,以精细化控制每个 JSBridge 接口是否可用。在某些特定官方测试页面上,大多数接口默认开放,而在其他页面中,仅开放少数接口。此种基于页面来源的权限划分策略,有效限制了潜在恶意网页的破坏能力。

3 微信小程序安全机制

微信小程序采用 JavaScript 开发,架构上分为渲染层与逻辑层,分别在独立线程中运行,相互隔离。其中渲染层负责界面展示,而逻辑层处理业务逻辑。开发者编写的逻辑层的 JavaScript 脚本不能使用浏览器暴露出来的 DOM API,而渲染层的 JavaScript 脚本也无法使用开发者的高权限功能。微信客户端给渲染层和逻辑层暴露的 JSAPI 功能也有所不同,例如渲染层可以调用 insertVideoPlayer、insertTextArea 等功能,而逻辑层可以调用 saveFile、addDownloadTask 等功能。这样的隔离防止了攻击者通过小程序的 XSS 等漏洞在渲染层执行高权限操作。

addToPagePool 添加渲染层的 JSAPI

渲染层可以使用的一些 JSAPI

结语

微信作为国内最具代表性的 IM 软件,在安全机制上体现出多层防护与权限细化管理的设计思路,如 JSBridge 精细授权、浏览器沙箱隔离、小程序双线程架构等,体现出其对安全风险的高度重视。

作为长期关注即时通讯软件安全的研究团队,DARKNAVY 始希望通过持续的漏洞研究、攻防分析与技术分享,推动 IM 生态在保障用户体验的同时,更加稳健、安全、可信地向前发展。

预告

本研究内容已入选专注纯粹技术交流的全新网络安全闭门沙龙 deepsec.cc ( Deep Security   Closed-door   Conference ) ,将于 6 月 16 日在现场深入探讨。

参   考

[ 1 ]  https://googleprojectzero.blogspot.com/2020/01/remote-iphone-exploitation-part-3.html

[ 2 ]  https://medium.com/tenable-techblog/stealing-downloads-from-slack-users-be6829a55f63

[ 3 ]  https://awakened1712.github.io/hacking/hacking-whatsapp-gif-rce/

[ 4 ]  https://www.facebook.com/security/advisories/cve-2025-30401

[ 5 ]  https://mp.weixin.qq.com/s/zqxkYk7vRvDPKxgoVj1PRw