更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)
Vim是一款从经典的vi编辑器发展而来的高度可定制文本编辑器,因其丰富的编程辅助功能而在开发者中广受欢迎;它不仅在Unix和类Unix系统上备受推崇,也广泛支持Windows、macOS等平台,其设计理念强调通过命令的组合来实现高效的文本编辑。在Vim提供的诸多增强特性中,Omni-Completion(全能补全)是一项自动补全功能,它通过分析光标前的上下文来预测并提供可能的补全选项。
Vim Python Omni-Completion代码注入漏洞(CVE-2026-52860)于2026年6月11日披露,CVSS 3.1评分为7.8分。官方描述指出:在9.2.0597版本之前,Vim的Python omni-completion功能在填充补全字典时,会使用exec()执行从当前缓冲区中重构出的函数和类定义。Python在定义时会计算函数默认值、参数注解以及基类表达式,因此恶意缓冲区可以在全能补全过程中执行攻击者控制的Python表达式。此前针对g:pythoncomplete_allow_import的缓解措施(GHSA-52mc-rq6p-rc7c)无法覆盖此路径,因为攻击者控制的代码并非来自被提取的import/from语句。
该漏洞的利用需要满足以下条件:目标Vim在编译时启用了Python解释器支持,用户打开恶意构造的Python文件后使用Vim Python Omni Completion功能触发补全操作。成功利用该漏洞后,攻击者能够以当前Vim进程的权限执行任意代码,进而窃取敏感数据、植入恶意程序或实施持久化控制。Vim < 9.2.0597
CVE-2026-52860是Vim编辑器Python omni-completion功能中的一个代码注入漏洞。在Vim 9.2.0597之前的版本中,Python omni-completion插件python3complete.vim(以及旧版pythoncomplete.vim)在填充补全字典时,会使用Python的exec()函数执行从当前缓冲区中重构出的函数和类定义。
由于Python语言的“定义时评估”特性,Python在定义函数和类时会立即计算函数默认参数值、参数注解以及类基类表达式。攻击者可通过构造恶意Python文件,在受害者触发omni-completion时实现任意代码执行。
漏洞的根本原因在于Vim的Python omni-completion插件在处理代码补全时,使用exec()函数直接执行从缓冲区重构的函数和类定义:

由于在解析代码函数和类的参数时,直接通过拼接的方式将参数名、操作符、表达式拼接为字符串,并将拼接后的完整参数字符串添加到列表,不会做任何过滤或安全检查:

之后在代码重构时,会将所有参数字符串拼接成函数或类定义,而这一过程中的过滤机制只针对作用域级别的import/from语句,无法检测参数表达式内部的调用:



最后,直接通过exec将重构的函数或类定义字符串作为Python代码执行,从而触发漏洞。
首先搭建漏洞环境,确保编译时启用+Python3解释器支持:

使用vim打开构造的恶意代码文件,进入插入模式,并在该模式下使用Omni-completion(Ctrl-X & Ctrl-O)触发漏洞:

查看攻击端的netcat监听,通过代码注入获得shell:

目前官方已有可更新版本,建议受影响用户升级至最新版本:Vim >= 9.2.0597 。
[1] https://nvd.nist.gov/vuln/detail/CVE-2026-52860
[2] https://github.com/vim/vim/security/advisories/GHSA-52mc-rq6p-rc7c
ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截至目前,ADLab已通过 CNVD/CNNVD/NVDB/CVE累计发布安全漏洞7000余个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖基础安全研究、电信运营商基础设施安全研究、移动终端安全研究、云安全研究、信创安全研究、物联网安全研究、车联网安全研究、工控安全研究、数据安全研究、5G安全研究、AI安全研究、卫星安全研究、低空安全研究、高级威胁研究、攻防体系建设。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。