Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconAttacker writes maliciously-named file with `|` to shared directory
-
DeliveryVictim opens Neovim in affected directory
-
Exploit`vim.secure.read()` prompts user with trust dialog
-
InstallVictim selects 'View' option
-
C2Unsanitized fullpath concatenated into `vim.cmd('sview ...')`
-
ExecutePipe separator causes injected Ex command to execute
-
ImpactArbitrary Vim commands (and optionally shell commands via `:!`) run as victim user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Command injection prevention
MITRE ATT&CK
1 technique across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the attacker to have write access to a filesystem path that will be encountered by the victim's Neovim session - for example, a shared project directory, a repository the victim clones, or any path from which Neovim triggers |
| Impact | The CVSS 3.1 base score of 5.3 (Medium) with vector AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L accurately captures a locally-exploitable, low-complexity attack requiring only standard user privileges with bounded CIA impact. Temporal metrics E:P (proof-of-concept exploit exists), RL:O (official fix available), and RC:C (confirmed) align with observed intelligence. EPSS data was not provided in the input - exploitation probability cannot be quantified. The CVE is not in CISA KEV, so active threat-actor targeting is unconfirmed at time of analysis. Real-world risk is most relevant on developer workstations running Linux or macOS: Neovim's user base routinely opens untrusted or shared project directories where malicious filenames could be planted. The CVSS UI:N designation may slightly overstate attacker autonomy - the victim must actively choose the 'View' option in a security prompt, representing at minimum implicit interaction; this is worth verifying against vendor classification. Critically, Windows systems are entirely unaffected because the Windows filesystem prohibits |
| Exploit ScenarioDerived | An attacker with local user-level filesystem access creates a file named |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jun 08, 2026
Command injection in Neovim up to version 0.12.2 allows a local attacker with low privileges to execute arbitrary Vim commands by crafting a file with a malicious name containing pipe (|) or other Vim Ex command separators. The vulnerable code path is the M.read function in runtime/lua/vim/secure.lua, which concatenates an unsanitized file path directly into a vim.cmd('sview ...') call when a user selects the 'View' action in Neovim's security trust prompt. This CVE is not listed in CISA KEV, indicating no confirmed widespread active exploitation; however, a publicly available proof-of-concept exploit exists (GitHub issue #39914) and an official patch has been released (commit f83e0dcaf8cf18de94828341b0a1a61a86c75baf via PR #39918).
RemediationAI
The primary remediation is to apply the upstream patch, which is available as commit f83e0dcaf8cf18de94828341b0a1a61a86c75baf merged via PR #39918 (https://github.com/neovim/neovim/pull/39918). The patch replaces unsafe string concatenation with vim.fn.fnameescape() in the 'View' branch of M.read. Upstream fix availability is confirmed via the merged PR and commit; however, a specific tagged release version incorporating this fix was not independently confirmed from the provided data - users should verify their installed Neovim build includes this commit hash or upgrade to any release published after the commit date. As a compensating control before patching, users should avoid selecting the 'View' option when vim.secure.read() prompts them about files in untrusted or shared directories, opting for 'Deny' instead; the trade-off is losing the safe-preview workflow. Setting set noexrc in the global Neovim config disables automatic loading of project-local config files, reducing exposure to the code path that invokes vim.secure.read(), at the cost of disabling legitimate project-local configuration. Restricting Neovim use to trusted directories via wrapper scripts or filesystem permissions also limits attacker ability to plant malicious filenames.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability resides in runtime/lua/vim/secure.lua within the M.read function, which is the backend for Neovim's trust-sandbox mechanism - the system that prompts users to allow, deny, or view potentially executable config files such as .nvimrc and .exrc. When the user selects 'View', the pre-patch code constructed a Vim Ex command by direct string concatenation: vim.cmd('sview ' .. fullpath). Because fullpath was not passed through vim.fn.fnameescape(), any filename containing Vim command metacharacters - most critically the pipe |, which is the Vim Ex command separator - would cause the editor to parse and execute the injected token as a second Ex command. The fix replaces the concatenation with vim.cmd(('sview %s'):format(vim.fn.fnameescape(fullpath))), applying proper escaping before command construction. CWE-77 (Improper Neutralization of Special Elements Used in a Command) precisely describes this root cause: externally-controlled input incorporated into a command string without neutralizing command-separator metacharacters. The CPE cpe:2.3:a:n/a:neovim:*:*:*:*:*:*:*:* covers the affected product range.
Know when Neovim gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:P
Primary rating from Vendor (VulDB) · only source for this CVE.
CVSS VectorVendor: VulDB
Lifecycle Timeline
2DescriptionCVE.org
A flaw has been found in Neovim up to 0.12.2. Affected by this issue is the function M.read of the file runtime/lua/vim/secure.lua of the component View Branch. Executing a manipulation of the argument path can lead to command injection. It is possible to launch the attack on the local host. The exploit has been published and may be used. This patch is called f83e0dcaf8cf18de94828341b0a1a61a86c75baf. A patch should be applied to remediate this issue.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
getchar.c in Vim before 8.1.1365 and Neovim before 0.3.6 allows remote attackers to execute arbitrary OS commands via th
vim is vulnerable to Heap-based Buffer Overflow. Rated high severity (CVSS 7.8), this vulnerability is no authentication
Alpine Linux: vim fixed in 9.1.0678-r0
Alpine Linux: vim fixed in 9.1.0652-r0
EUVD-2026-35018
GHSA-6869-x4fx-m53f
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB