Vulnerabilità in Vim che consente l'esecuzione di codice aprendo file dannosi

Negli editor testuali Vim e Neovim è stata una vulnerabilità (CVE-2019-12735), che consente di eseguire codice arbitrario aprendo un file formattato in modo specifico. Il problema si manifesta quando è attivo il mode predefinito modeline (':set modeline'), che permette di definire le opzioni di modifica nel file elaborato. La vulnerabilità è stata risolta nelle versioni
Vim 8.1.1365 e Neovim 0.3.6.

Attraverso modeline è possibile impostare solo un numero limitato di opzioni. Se come valore di un'opzione viene specificata un'espressione, questa viene eseguita in modalità sandbox, consentendo solo le operazioni più semplici e sicure. Tra queste, è inclusa il comando ':source', in cui è possibile utilizzare il modificatore '!' per eseguire comandi arbitrari dal file specificato. Pertanto, per eseguire codice, è sufficiente indicare nella riga modeline una struttura del tipo 'set foldexpr=execute(‘\:source! some_file’):'. In Neovim, la chiamata a execute è vietata, ma al suo posto è possibile utilizzare assert_fails.

Ad esempio, per eseguire il comando 'uname -a', è sufficiente aprire in Vim o Neovim un file la cui prima o ultima riga contiene:

:!uname -a||» vi:fen:fdm=expr:fde=assert_fails(«source\!\ \%»):fdl=0:fdt=»

Il comando 'source! %' leggerà i comandi dal file corrente e, di conseguenza, eseguirà ':!uname -a'. Per nascondere questa riga dall'output dell'utilità cat possono essere utilizzate sequenze di escape. Ad esempio, in questo durante l'esecuzione di operazioni di copia dal contenitore, si è riusciti a effettuare un attacco con successo in meno dell'1% dei casi, cambiando ciclicamente il collegamento simbolico nel percorso utilizzato per l'operazione di copia (l'attacco è riuscito dopo circa 10 secondi di tentativi continui per copiare il file con il comando «docker cp»). aprendo un file in vim si crea una connessione di rete con accesso shell al sistema vittima, ma questo file non susciterà sospetti quando viene visualizzato nel terminale dalla utility cat.

Per verificare se il mode modeline è attivo, è possibile utilizzare il comando ':set modeline?'. Per disabilitarlo in vimrc, è possibile aggiungere la riga 'set nomodeline'. Nelle distribuzioni, il problema è stato risolto in RHEL, SUSE/openSUSE, Fedora, FreeBSD, Ubuntu, Arch Linux e ALT. La vulnerabilità rimane non corretta in Debian (in Debian la modeline è disattivata di default, quindi nella sua configurazione predefinita la vulnerabilità non si manifesta).

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster