CVE-2024-41965

4.2 MEDIUM

📋 TL;DR

This CVE describes a double-free vulnerability in Vim's dialog_changed() function that occurs when abandoning an unnamed modified buffer. The vulnerability can lead to heap corruption, crashes, and potential arbitrary code execution. All users running Vim versions before v9.1.0648 are affected.

💻 Affected Systems

Products:
  • Vim
Versions: All versions before v9.1.0648
Operating Systems: Linux, Unix-like systems, macOS, Windows
Default Config Vulnerable: ⚠️ Yes
Notes: Vulnerability triggers when user attempts to save changes from an unnamed buffer after being prompted by dialog_changed().

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Heap corruption leading to arbitrary code execution with the privileges of the Vim process, potentially resulting in system compromise.

🟠

Likely Case

Application crash or denial of service when the double-free condition is triggered during buffer operations.

🟢

If Mitigated

Limited to application instability or crashes if exploit attempts fail or are blocked by security controls.

🌐 Internet-Facing: LOW - Vim is typically not exposed to internet-facing interfaces.
🏢 Internal Only: MEDIUM - Vim is widely used by developers and system administrators, making internal exploitation possible through malicious files or scripts.

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: MEDIUM

Exploitation requires user interaction (responding to save prompt) and knowledge of triggering the specific buffer condition.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: v9.1.0648

Vendor Advisory: https://github.com/vim/vim/security/advisories/GHSA-46pw-v7qw-xc2f

Restart Required: No

Instructions:

1. Update Vim to version 9.1.0648 or later. 2. On Linux: Use package manager (apt-get upgrade vim, yum update vim, etc.). 3. On macOS: Use Homebrew (brew upgrade vim). 4. On Windows: Download latest installer from vim.org. 5. Compile from source: git clone, checkout v9.1.0648+, make install.

🔧 Temporary Workarounds

Avoid unnamed buffer save prompts

all

Prevent triggering the vulnerable code path by always saving files with names before making changes.

vim -c ':set confirm' filename.txt

Disable confirm prompts

all

Configure Vim to not prompt for confirmation when abandoning buffers.

echo 'set confirm' >> ~/.vimrc
echo 'set nohidden' >> ~/.vimrc

🧯 If You Can't Patch

  • Restrict Vim usage to trusted users only
  • Implement application allowlisting to control Vim execution

🔍 How to Verify

Check if Vulnerable:

Run 'vim --version' and check if version is below 9.1.0648

Check Version:

vim --version | head -1

Verify Fix Applied:

Run 'vim --version' and confirm version is 9.1.0648 or higher

📡 Detection & Monitoring

Log Indicators:

  • Vim crash logs
  • Core dumps from Vim process
  • System logs showing Vim segmentation faults

Network Indicators:

  • None - local vulnerability

SIEM Query:

process_name:vim AND (event_type:crash OR exit_code:139 OR exit_code:11)

🔗 References

📤 Share & Export