diff options
| author | Christian Brabandt <cb@256bit.org> | 2026-04-01 16:23:49 +0000 |
|---|---|---|
| committer | Christian Brabandt <cb@256bit.org> | 2026-04-01 16:23:49 +0000 |
| commit | 7088926316d8d4a7572a242d0765e99adfc8b083 (patch) | |
| tree | 0772ae8c0d46acbfc0cd93021d18e5e25a30d131 /runtime/autoload/zip.vim | |
| parent | fe05143f5d70c89e4a14cbf61fee091dc6ba791c (diff) | |
| download | Project-Tick-7088926316d8d4a7572a242d0765e99adfc8b083.tar.gz Project-Tick-7088926316d8d4a7572a242d0765e99adfc8b083.zip | |
patch 9.2.0280: [security]: path traversal issue in zip.vim
Problem: [security]: path traversal issue in zip.vim
(MichaĆ Majchrowicz)
Solution: Detect more such attacks and warn the user.
Github Advisory:
https://github.com/vim/vim/security/advisories/GHSA-jc86-w7vm-8p24
Signed-off-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'runtime/autoload/zip.vim')
| -rw-r--r-- | runtime/autoload/zip.vim | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/runtime/autoload/zip.vim b/runtime/autoload/zip.vim index e81308fac1..1ce9cfc2f7 100644 --- a/runtime/autoload/zip.vim +++ b/runtime/autoload/zip.vim @@ -20,6 +20,7 @@ " 2025 Dec 20 by Vim Project: use :lcd instead of :cd " 2026 Feb 08 by Vim Project: use system() instead of :! " 2026 Mar 08 by Vim Project: Make ZipUpdatePS() check for powershell +" 2026 Apr 01 by Vim Project: Detect more path traversal attacks " License: Vim License (see vim's :help license) " Copyright: Copyright (C) 2005-2019 Charles E. Campbell {{{1 " Permission is hereby granted to use and distribute this code, @@ -367,6 +368,11 @@ fun! zip#Write(fname) return endif + if simplify(a:fname) =~ '\.\.[/\\]' + call s:Mess('Error', "***error*** (zip#Write) Path Traversal Attack detected, not writing!") + return + endif + let curdir= getcwd() let tmpdir= tempname() if tmpdir =~ '\.' @@ -481,7 +487,7 @@ fun! zip#Extract() if fname =~ '/$' call s:Mess('Error', "***error*** (zip#Extract) Please specify a file, not a directory") return - elseif fname =~ '^[.]\?[.]/' + elseif fname =~ '^[.]\?[.]/' || simplify(fname) =~ '\.\.[/\\]' call s:Mess('Error', "***error*** (zip#Browse) Path Traversal Attack detected, not extracting!") return endif |
