Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Vim instance running in socketserver mode
-
DeliveryConnect to local or loopback socket
-
ExploitSend crafted JSON payload exceeding 4096-byte read buffer
-
ExecutionForce buffer refill freeing original pointer mid-parse
-
PersistInvalid escape sequence triggers parse error path
-
ImpactVim server dereferences stale pointer and crashes
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Memory lifecycle management
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires Vim to be started with the socketserver or clientserver channel feature explicitly enabled (e.g., via --clientserver socket --servername channel:PORT), which is a non-default, operator-configured deployment mode. The attacker must be able to connect to the Vim socket - typically requiring local system access or, if the socket is bound to a routable address rather than loopback, network access. The malicious payload must exceed 4096 bytes (MAXMSGSIZE) so the JSON string crosses a buffer boundary, and must contain an invalid JSON construct (such as a broken \u escape) after that boundary to trigger the error path. Standard interactive Vim sessions, including plugins that read JSON files, do not invoke this code path. Windows builds are not affected per the test suite constraints. |
| Impact | The CVSS 3.1 base score of 3.3 (AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L) accurately reflects a genuine low-severity finding. The local attack vector is consistent with Vim's socketserver typically binding to a local socket or loopback address rather than an externally routable interface. The impact is confined strictly to availability - a server crash - with no confidentiality or integrity implications per the CVSS vector. Notably, the source data tags this vulnerability as 'Information Disclosure,' which conflicts with C:N in the CVSS vector; reading freed memory on an error path could theoretically expose heap content, but the official assessment assigns no confidentiality impact and the commit diff supports that conclusion. No EPSS data was provided. The absence of a KEV entry, the local attack vector, the non-default socketserver configuration requirement, and the crash-only impact collectively place this at low operational priority for most environments. SSVC signals: exploitation is unconfirmed, the attack is not automatable at scale, and technical impact is partial availability only. |
| Exploit ScenarioDerived | A local user on a system where Vim is running in socketserver mode connects to the Vim socket and sends a raw JSON payload exceeding 4096 bytes in length, with an invalid Unicode escape sequence (e.g., \uZZZZ) positioned past the first buffer boundary. The oversized message forces a buffer refill mid-parse, freeing the pointer used by the error-reporting path, which then reads freed memory and causes the Vim server process to crash. No independent public exploit code is known, but the commit's test function provides a functional reproduction pattern. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 11, 2026
Use-after-free in Vim's JSON channel parsing (versions 9.2.0511 through 9.2.0843) causes the socketserver process to crash when processing malformed JSON messages that straddle read-buffer boundaries. The stale pointer p in json_decode_item() is invalidated when channel_fill() frees the underlying buffer mid-parse; the error-reporting code then reads freed memory, producing a crash with no code-execution or data-exfiltration potential. No active exploitation is confirmed and no public exploit code has been identified; vendor-released patch v9.2.0844 resolves the flaw.
RemediationAI
Upgrade Vim to version 9.2.0844 or later, which incorporates commit f8126294a526aa80c5123eb3079e325daee9ec75 correcting the stale-pointer dereference in src/json.c. The patch is a targeted single-line change with minimal regression risk. For environments that cannot upgrade immediately, the effective compensating control is to stop using Vim's socketserver or clientserver channel feature - specifically, do not invoke Vim with --servername or --remote options in socket or channel mode. This entirely eliminates the vulnerable code path with no impact on standard interactive or scripted Vim usage. The GitHub advisory is at https://github.com/vim/vim/security/advisories/GHSA-69ch-22ch-r887.
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 flaw resides in src/json.c in the json_decode_item() function (cpe:2.3:a:vim:vim:*:*:*:*:*:*:*:*), which parses JSON messages exchanged over Vim's channel and socketserver interface. When a JSON string is large enough to cross a read-buffer boundary (the channel reads at most MAXMSGSIZE = 4096 bytes per call), json_decode_string() internally invokes js_fill() to refill the buffer. This refill frees the original buffer and provisions a new one. A local variable pointer p - set to point into the old buffer before the refill - is then passed to semsg() on the error path to report the parse position, a textbook CWE-416 use-after-free. The fix replaces the stale p with reader->js_buf + reader->js_used, correctly deriving the live cursor position from the reader structure. The bug manifests only on the error path: an invalid JSON construct (such as a malformed \uZZZZ escape) must appear after the buffer boundary to trigger parse failure and reach the vulnerable semsg() call.
Know when Vim 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
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L
Local vector confirmed by socketserver socket access requiring local presence; PR:L required to connect; crash-only impact means no confidentiality or integrity effect.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Vim is an open source, command line text editor. From 9.2.0511 until 9.2.0844, json_decode_item() in src/json.c can retain a stale pointer after json_decode_string() invokes channel_fill() to refill and free the current buffer, causing the error path to read freed memory instead of reader->js_buf + reader->js_used when an invalid JSON string spans buffers. This issue is fixed in version 9.2.0844.
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
Use-after-free vulnerabilities occur when a program continues to access memory through a pointer after that memory has been deallocated.
Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Heap-based Buffer Overflow in GitHub repository vim/vim prior to 9.0.0765. Rated critical severity (CVSS 9.8), this vuln
Use of Out-of-range Pointer Offset in GitHub repository vim/vim prior to 8.2.4440. Rated high severity (CVSS 8.8), this
Code execution vulnerability in Vim before 9.2.0272 allows attackers to gain immediate arbitrary command execution upon
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 8.0), this vulnerability is remotely exploita
Use after free in append_command in GitHub repository vim/vim prior to 8.2.4895. Rated high severity (CVSS 7.8), this vu
Heap-based Buffer Overflow in function cmdline_erase_chars in GitHub repository vim/vim prior to 8.2.4899. Rated high se
vim is vulnerable to Heap-based Buffer Overflow. Rated high severity (CVSS 7.8), this vulnerability is no authentication
vim is vulnerable to Heap-based Buffer Overflow. Rated high severity (CVSS 7.8), this vulnerability is no authentication
vim is vulnerable to Heap-based Buffer Overflow. Rated high severity (CVSS 7.8), this vulnerability is no authentication
Heap-based Buffer Overflow in GitHub repository vim/vim prior to 8.2. Rated high severity (CVSS 7.8), this vulnerability
Out-of-bounds Read in GitHub repository vim/vim prior to 8.2. Rated high severity (CVSS 7.8), this vulnerability is no a
EUVD-2026-56225
NVD
CVE.org
EPSS
Vulnrichment
GitHub
VulDB
Exploit-DB