前几天在对某安全补丁进行逆向分析时,我尝试使用 radare2(简称 r2)配合 Ghidra 的 diff 插件,发现这种组合在 Linux 下进行二进制逆向分析效率很高。正沉浸在研究思路中时,被一条微信消息打断了。这反而让我灵机一动:能不能用 r2 去调试 Linux 版的微信呢?
说试就试。我随即在 Kylin 系统上安装了最新的微信 for Linux 版本(v4.1)。启动微信后,我通过 strace 命令附加到其进程,并构造了几个特殊的文件名进行了一轮 fuzz 测试。
复现过程其实并不复杂。我创建了几个文件名中嵌入了特定系统命令的 POC 文件,例如包含 id、lscpu 等命令。当我尝试在微信聊天窗口中发送这些文件并点击打开时,strace 的日志清楚地显示,这些系统命令被成功调用并执行了。

显然,微信 for Linux 客户端在解析用户接收到的文件名时,没有进行必要的安全校验或转义,直接将其拼接到了系统命令中,从而导致了任意命令执行。这个发现让我对当前软件,尤其是在特定平台下的安全开发生命周期产生了更多思考。
那么,漏洞的危害有多大?通过一个简单的 POC 就能直观看到。下图展示了在微信中发送一个名为 `kcalc`.pdf 的文件,当接收方点击打开时,系统竟然直接弹出了一个 KCalc 计算器程序。

信创系统是否受影响?
既然在通用 Linux 发行版上验证成功,一个很自然的问题就来了:那些基于 Linux 内核研发的信创系统,会不会也存在同样的问题呢?
答案几乎是肯定的。因为微信 for Linux 客户端在上述场景下的处理逻辑是相同的,无论底层是 Ubuntu、CentOS 还是国产化的信创操作系统。只要有权限执行相关命令,该漏洞就可能被触发。已经有安全研究者在相关系统上复现了此问题。

从技术角度来看,这本质上是一个经典的命令注入漏洞。攻击者可以精心构造一个包含恶意命令的文件名,当受害者在微信中点击此文件时,嵌入的命令就会在受害者系统上执行。这可能带来信息泄露、系统被控等风险。对于安全研究人员和开发者而言,理解此类漏洞的原理和触发条件,是构建有效防御的第一道关卡。如果你对漏洞的底层机制和防御方法感兴趣,可以深入探讨。
简要分析与建议
目前来看,该漏洞的利用有一定的前置条件(需要用户交互点击文件),但其危害性不容忽视。对于普通用户,在收到可疑文件时应保持警惕。对于系统管理员和企业运维,则需要对运行此类客户端的环境进行更严格的安全管控。
此次发现也提醒我们,无论是在通用平台还是信创环境下,软件的安全审计与安全开发实践都至关重要。技术社区如云栈社区等平台,一直是安全技术爱好者交流与学习的重要场所,类似的漏洞分析与讨论有助于提升整个生态的安全水位。希望相关厂商能够尽快关注并修复此类问题,共同维护一个更安全的数字环境。
|