vim-patch:9.2.0479: [security]: runtime(tar): command injection in tar plugin

Problem:  [security]: runtime(tar): command injection in tar plugin
          (Christopher Lusk)
Solution: Use the correct shellescape(args, 1) form for a :! command

Github Advisory:
https://github.com/vim/vim/security/advisories/GHSA-2fpv-9ff7-xg5w

3fb5e58fbc

Co-authored-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
zeertzjq
2026-06-19 09:42:27 +08:00
parent f5ad6763b6
commit 025a3e2baf
2 changed files with 21 additions and 0 deletions

View File

@@ -24,6 +24,7 @@
" 2026 Apr 09 by Vim Project: fix bug with dotted filename (#19930)
" 2026 Apr 15 by Vim Project: fix more path traversal issues (#19981)
" 2026 Apr 16 by Vim Project: use g:tar_secure in tar#Extract()
" 2026 May 14 by Vim Project: use correct shellescape() call in Vimuntar()
"
" Contains many ideas from Michael Toren's <tar.vim>
"

View File

@@ -321,3 +321,23 @@ func Test_extract_with_dotted_filename()
call delete('X.txt')
bw!
endfunc
func Test_extract_command_injection()
throw 'SKipped: Nvim does not support :Vimuntar'
CheckExecutable gunzip
CheckExecutable touch
var tgz = eval('0z1F8B08087795056A000364756D6D792E74617200EDCE2B12C2300004D01C254' ..
'7480269CE534080A8495BD1DBF3996106C3A08A7ACFACD8157B59A7690BFB4A0FC3707C666E357D' ..
'E65BC8B5A47CC8A5D61A522EA5B510D3CEBF5ED679197B8CE17CEDB7F9D4C76FBB5F3D000000000' ..
'000000000FCD11D32415E2C00280000')
var dirname = tempname()
mkdir(dirname, 'R')
var tar = dirname .. "/';%$(touch pwned)'.tgz"
writefile(tgz, tar)
new
exe "e " .. fnameescape(tar)
exe ":Vimuntar " .. dirname
assert_false(filereadable(dirname .. "/pwned"))
bw!
endfunc