macvim-dev / macvim-dev/macvim
[Security] MacVim affected by GHSA-hwg5-3cxw-wvvg — OS command injection via backticks in 'path' option completion (vim < 9.2.0435)
Personne n'a encore pris cette issue.
- Langage dominant
- Vim Script
- Étoiles
- 7.9k
- Forks
- 691
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
Summary
MacVim's src/findfile.c and src/optiondefs.h allow backtick expressions in the 'path' option to be executed when file completion is triggered. Since 'path' can be set via modelines, an attacker can embed a malicious backtick command in a project file that executes when the victim uses file-path completion. The fix from vim 9.2.0435 (190cb3c2) has not been applied to macvim r183.
Vulnerability Details
- GHSA: GHSA-hwg5-3cxw-wvvg
- CVE: CVE-2026-44656
- Upstream fix (vim): 9.2.0435 (commit
190cb3c2b6e53290735f2c5cab1a06f703a90e69, 2026-05-03) - Affected code:
src/findfile.c+src/optiondefs.h('path'option) - Vulnerability type: CWE-78 — OS Command Injection
Root Cause
The 'path' option is not marked P_SECURE in src/optiondefs.h, so it can be set via modelines:
/* src/optiondefs.h line 2067 (macvim r183) */
{"path", "pa", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
Missing P_SECURE allows a modeline to set path+=\cmd`. In src/findfile.c, when file completion is performed for 'path'entries, backtick expressions are expanded via the shell — executingcmd`.
Attack Scenario
- Attacker places a project file with a modeline:
// vim: set path+=`id>/tmp/pwned` : - Victim opens the file in MacVim with modeline support enabled (default)
- MacVim sets
pathto include the backtick expression - When the victim presses
Tabfor:findcompletion, MacVim expands the backtick and executesid>/tmp/pwned
Verification
$ grep -n '"path".*P_STRING' src/optiondefs.h
2067: {"path", "pa", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
Missing P_SECURE. Also missing the backtick check in findfile.c. Patch 9.2.0435 not present:
$ git log --all --oneline | grep -i '9.2.0435\|path.*backtick\|hwg5'
(no output)
Suggested Fix
Merge vim patches up to at least 9.2.0435. The fix:
- Adds
P_SECUREto'path'inoptiondefs.h:{"path", "pa", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE|P_COMMA|P_NODUP, - Adds a backtick guard in
findfile.c:/* do not expand backticks, could have been set via a modeline */ if (vim_strchr(buf, '`') != NULL) continue;
References
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par src/optiondefs.h et src/findfile.c, puis comparez les changements manquants avec le commit Vim 190cb3c2 ou la version 9.2.0435. Vérifiez que l’option 'path' et la gestion des backticks correspondent au correctif upstream, et utilisez les vérifications grep et le scénario d’attaque de l’issue pour confirmer que la vulnérabilité est corrigée.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- c, macos, vim
- Domaine
- desktop, security
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- Calme
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 68/100