天下漏洞,尽知其名
HIGH 重点关注

CVE-2026-102925 virtualenv 激活脚本命令注入漏洞

影响攻击者可借激活脚本注入命令,以用户权限执行任意代码

AI 研判

virtualenv 是用于创建隔离 Python 虚拟环境的工具。在 21.7.13 之前,其生成的 activate(bash/zsh)与 activate.fish 脚本会把已经过 shlex.quote 转义的值再次放入引号上下文中,导致多余引号破坏数据引用。当用户 source 激活脚本时,特制路径中的 shell 元字符会被当作命令解析,从而以该用户权限执行代码。

影响范围

virtualenv

virtualenv 21.7.13 之前的版本,具体受影响版本范围暂无公开信息。

漏洞详情

漏洞类型为命令注入(引号转义不当)。成因是脚本对已转义值重复加引号,使引号提前闭合,后续内容脱离纯数据上下文。利用方式:在 bash/zsh 中,当被迁移环境的记录目录缺失时,特制虚拟环境路径会进入 __VIRTUAL_ENV__;在 fish 中,特制 Tcl/Tk 库路径会进入 __TCL_LIBRARY__ 或 __TK_LIBRARY__,用户 source 时触发命令执行。

利用条件与风险

需要用户 source 被污染的激活脚本,且路径可控(如迁移环境或 Tcl/Tk 库路径被篡改)。实战中可导致以该用户权限执行任意命令,CVSS 7.8 属高危。

修复建议

升级至 virtualenv 21.7.13 或更高版本。临时缓解:避免 source 来源不可信或路径异常的虚拟环境激活脚本,并检查脚本中引号转义是否正确。

原始情报

virtualenv is a tool for creating isolated virtual python environments. Prior to 21.7.13, the generated activate (bash and zsh) and activate.fish scripts place values already escaped by shlex.quote inside an additional quoted context. In the bash and zsh script, a crafted virtual environment path reaches __VIRTUAL_ENV__ when a relocated environment’s recorded directory is absent; in the fish script, crafted Tcl or Tk library paths reach __TCL_LIBRARY__ or __TK_LIBRARY__. The surplus quotes can terminate the data-only quoted run and leave shell metacharacters parsed as commands when a user sources the activation script, allowing code execution with that user’s privileges. This issue is fixed in version 21.7.13.