macvim-dev / macvim-dev/macvim

[Security] MacVim affected by GHSA-85ch-p2qr-m5gx — netrw OS command injection via sftp:/file: URL tempfile suffix (vim < 9.2.0383)

Aperta Adatta ai principianti
#1,657 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Vim Script
Stelle
7.9k
Fork
691
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Summary

MacVim bundles the netrw plugin (runtime/pack/dist/opt/netrw/autoload/netrw.vim) which passes an unescaped tmpfile variable to a shell command when fetching remote files via sftp:// or file: URLs. A crafted URL with a shell metacharacter in the filename suffix causes arbitrary command execution. The fix from vim 9.2.0383 (405e2fb6) has not been applied to macvim r183.

Vulnerability Details

  • GHSA: GHSA-85ch-p2qr-m5gx
  • CVE: CVE-2026-42307
  • Upstream fix (vim): 9.2.0383 (commit 405e2fb6c2e35e09cb64e0f92c1efdafd6b3978a, 2026-04-21)
  • Affected code: runtime/pack/dist/opt/netrw/autoload/netrw.vim line 1822
  • Vulnerability type: CWE-78 — OS Command Injection

Root Cause

In the sftp reading path, tmpfile (derived from the remote URL's filename suffix) is passed to the sftp command unescaped:

" runtime/pack/dist/opt/netrw/autoload/netrw.vim line 1822 (macvim r183)
call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".netrw#os#Escape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)

tmpfile is constructed from the remote filename suffix (e.g., the extension part of sftp://host/foo.txt;id). When tmpfile contains shell metacharacters like ;, &&, or |, they are executed by the shell.

Attack Scenario
  1. Attacker tricks victim into opening sftp://attacker.com/payload;touch /tmp/pwned
  2. MacVim's netrw constructs tmpfile containing ;touch /tmp/pwned
  3. The sftp command executes with the unescaped tmpfile suffix, running the injected command

Verification

$ grep -n 'netrw_sftp_cmd.*tmpfile' runtime/pack/dist/opt/netrw/autoload/netrw.vim
1822:      call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".netrw#os#Escape(...)..." ".tmpfile)

The fix netrw#os#Escape(tmpfile,1) is absent. Patch 9.2.0383 not present:

$ git log --all --oneline | grep -i '9.2.0383\|sftp\|85ch'
(no output)

Suggested Fix

Merge vim patches up to at least 9.2.0383. The fix escapes tmpfile:

" Fixed (vim 9.2.0383):
call netrw#os#Execute(s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".netrw#os#Escape(g:netrw_machine.":".b:netrw_fname,1)." ".netrw#os#Escape(tmpfile,1))

References

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia da runtime/pack/dist/opt/netrw/autoload/netrw.vim alla riga 1822 e confrontalo con il fix di Vim 405e2fb6 della versione 9.2.0383. Verifica il percorso URL sftp:// e file: interessato usando il comando grep mostrato nell’issue; l’attività è completata quando tmpfile è escaped e il fix upstream è presente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
macos, vim
Ambito
desktop, security
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Tranquilla
Chiarezza
Specificata chiaramente
Idoneità per principianti
76/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.