[LFS Trac] #5947: vim-9.2.0597 (Security Update)
"LFS Trac" ([email protected] via lfs-book Mailing List) <[email protected]> Fri, 05 Jun 2026 17:41:58 -0000
| Newsgroups | gmane.linux.lfs.book |
|---|---|
| Message-ID | <[email protected]> |
#5947: vim-9.2.0597 (Security Update)
-----------------------------+----------------------
Reporter: Douglas R. Reno | Owner: lfs-book
Type: enhancement | Status: new
Priority: high | Milestone: 13.1
Component: Book | Version: git
Severity: normal | Keywords:
-----------------------------+----------------------
This fixes another arbitrary code execution issue in the Python omni-
completion functionality:
{{{
Arbitrary Code Execution via Python Omni-Completion in Vim < 9.2.597
====================================================================
Date: 2026-06-04
Severity: Medium
CVE: *requested, not yet assigned*
CWE: Improper Control of Generation of Code (CWE-94)
## Summary
Vim's Python omni-completion executes reconstructed function and class
definitions from the current buffer with `exec()` as part of populating
the completion dictionary. Python evaluates function default values,
parameter annotations, and class base expressions at definition time,
so a hostile buffer can execute attacker-controlled Python expressions
during omni-completion. The existing `g:pythoncomplete_allow_import`
mitigation (GHSA-52mc-rq6p-rc7c) does not cover this path, because the
attacker-controlled code is not a harvested `import`/`from` statement.
## Description
In `runtime/autoload/python3complete.vim` (and the legacy
`pythoncomplete.vim`), the omni-completion entry point calls
`exec(src, self.compldict)` on source reconstructed from the parsed
buffer. The reconstructed source includes function definitions whose
parameter lists are joined verbatim from tokens harvested by the
internal `_parenparse()` helper, which preserves default expressions
and annotations as written in the buffer. The same applies to class
base lists. When `exec()` runs the reconstructed `def` and `class`
statements, Python evaluates those expressions.
## Impact
An attacker who can convince a user to open or edit a hostile Python
buffer and trigger Python omni-completion (CTRL-X CTRL-O, or a plugin
that invokes the completion function) can execute Python code in the
user's Vim process. The code runs with the user's privileges.
Vim built without `+python3` and `+python` is not affected. Triggering
omni-completion in the hostile buffer is required; opening the file
alone is not sufficient.
## Acknowledgements
The Vim project would like to thank github user DavidCarliez for
reporting and analyzing the issue.
## References
The issue has been fixed as of Vim patch
[v9.2.597](https://github.com/vim/vim/releases/tag/v9.2.0597).
-
[Commit](https://github.com/vim/vim/commit/c8c63673bc4253212820626aeeb75999d9a539d2)
- [Github Security
Advisory](https://github.com/vim/vim/security/advisories/GHSA-
65p9-mwwx-7468)
- [Github Security Advisory GHSA-52mc-rq6p-
rc7c](https://github.com/vim/vim/security/advisories/GHSA-52mc-rq6p-rc7c)
(prior mitigation for the same surface)
}}}
--
Ticket URL: <https://wiki.linuxfromscratch.org/lfs/ticket/5947>
LFS Trac <https://wiki.linuxfromscratch.org/lfs/>
Linux From Scratch: Your Distro, Your Rules.
--
http://lists.linuxfromscratch.org/sympa/info/lfs-book
Unsubscribe: See the above information page