In Texteditoren und gefunden (), die es ermöglicht, beliebigen Code auszuführen, wenn eine speziell formatierte Datei geöffnet wird. Das Problem tritt auf, wenn der standardmäßig aktivierte modeline-Modus (':set modeline') aktiviert ist, der es ermöglicht, Bearbeitungsoptionen in der verarbeiteten Datei festzulegen. Die Schwachstelle wurde in den Versionen
und .
Über modeline können nur eine begrenzte Anzahl von Optionen festgelegt werden. Wenn ein Ausdruck als Wert für eine Option angegeben wird, wird dieser im Sandbox-Modus ausgeführt, der nur die einfachsten sicheren Operationen zulässt. Dazu gehört auch der Befehl ':source', bei dem der Modifikator '!' verwendet werden kann, um beliebige Befehle aus der angegebenen Datei auszuführen. So reicht es aus, in der modeline-Zeile eine Konstruktion wie 'set foldexpr=execute(‘\:source! some_file’):' anzugeben, um Code auszuführen. In Neovim ist der Aufruf von execute verboten, stattdessen kann assert_fails verwendet werden.
Um beispielsweise den Befehl 'uname -a' auszuführen, genügt es, eine Datei in Vim oder Neovim zu öffnen, in deren erster oder letzter Zeile Folgendes angegeben ist:
:!uname -a||» vi:fen:fdm=expr:fde=assert_fails(«source\!\ \%»):fdl=0:fdt=»
Der Befehl "source! %" liest die Befehle aus der aktuellen Datei und führt entsprechend ":!uname -a" aus. Um diese Zeile von der Ausgabe des cat-Utilities zu verbergen, können Escape-Sequenzen verwendet werden. Zum Beispiel in diesem wird beim Öffnen einer Datei in vim eine Netzwerkverbindung mit Shell-Zugriff auf das System des Opfers hergestellt, dabei ruft diese Datei jedoch keine Verdachtsmomente bei der Ausgabe im Terminal des cat-Utilities hervor.
Die Aktivität des modeline-Modus kann mit dem Befehl ":set modeline?" überprüft werden. Um ihn in vimrc zu deaktivieren, kann die Zeile "set nomodeline" hinzugefügt werden. In den Distributionen wurde das Problem behoben in , , , , , und . Die Schwachstelle bleibt in unerledigt (in Debian ist modeline standardmäßig deaktiviert, daher tritt die Schwachstelle im Standardzustand nicht auf).
Quelle: opennet.ru
