Kurze Antwort: In vielen Situationen ist Vim für diese Art von Angriff anfällig (beim Einfügen von Text im Einfügemodus).
Konzeptioneller Beweiß
Unter Verwendung des verlinkten Artikels als Ausgangspunkt konnte ich schnell eine Webseite mit folgendem Code erstellen, wobei HTML - Elemente und CSS verwendet wurden, um den mittleren Teil des Texts auszublenden, sodass nur ls -la
der gelegentliche Betrachter (nicht der Betrachter) darauf zugreifen kann Quelle). Hinweis: Das ^[
ist das Escape-Zeichen und das ^M
ist das Wagenrücklaufzeichen. Stack Exchange bereinigt Benutzereingaben und schützt vor dem Ausblenden von Inhalten mithilfe von CSS, sodass ich den Proof of Concept hochgeladen habe .
ls ^[:echom "This could be a silent command."^Mi -la
Wenn Sie sich im Einfügemodus befinden und diesen Text in Terminal Vim einfügen (mit einigen Qualifikationen, siehe unten), wird dies angezeigt. ls -la
Wenn Sie jedoch den :messages
Befehl ausführen , werden die Ergebnisse des Befehls hidden Vim angezeigt.
Verteidigung
Um sich gegen diesen Angriff zu verteidigen, ist es am besten, im normalen Modus zu bleiben und mit "*p
oder einzufügen "+p
. Im Normal - Modus, wenn p utting Text aus einem Register, der vollständige Text (einschließlich der versteckten Teil) eingefügt wird. Das gleiche passiert nicht im Einfügemodus (auch wenn :set paste
) eingestellt wurde.
Eingeklammerter Einfügemodus
Neuere Versionen von Vim unterstützen den Einfügemodus in eckigen Klammern , der diese Art von Kopier-Einfüge-Angriff abschwächt. Sato Katsura hat klargestellt, dass "Unterstützung für eingeklammerte Paste in Vim 8.0.210 erschienen ist und zuletzt in Version 8.0.303 (veröffentlicht am 2. Februar 2017) behoben wurde".
Hinweis: Wie ich es verstehe, Versionen von Vim mit Unterstützung für klammert Paste - Modus sollten Sie schützen bei der Verwendung von Einfügen Ctrl- Shift- V( die meisten GNU / Linux - Desktop - Umgebungen), Ctrl- V(MS Windows), Command- V(Mac OS X), Shift- Insertoder eine Maus Mittelklick.
Testen
Ich habe später einige Tests auf einem Lubuntu 16.04-Desktopcomputer durchgeführt, aber meine Ergebnisse waren verwirrend und nicht schlüssig. Ich habe seitdem gemerkt, dass dies daran liegt, dass ich immer den GNU-Bildschirm verwende, aber es stellt sich heraus, dass der Bildschirm die Escape-Sequenz filtert, die zum Aktivieren / Deaktivieren des Einfügemodus in Klammern verwendet wird (es gibt einen Patch, aber es sieht so aus, als wäre er zu einem Zeitpunkt gesendet worden, als der Projekt wurde nicht aktiv gepflegt). In meinen Tests funktioniert der Proof of Concept immer, wenn Vim über den GNU-Bildschirm ausgeführt wird, unabhängig davon, ob Vim oder der Terminal-Emulator den Einfügemodus in Klammern unterstützen.
Weitere Tests wären nützlich, aber bisher stellte ich fest, dass die Unterstützung des Einfügemodus in Klammern durch den Terminalemulator meinen Proof of Concept blockiert - solange der GNU-Bildschirm die relevanten Escape-Sequenzen nicht blockiert. Benutzer nneonneo meldet jedoch, dass das sorgfältige Erstellen von Escape-Sequenzen verwendet werden kann, um den Modus für das Einfügen in eckigen Klammern zu beenden.
Beachten Sie, dass der Proof of Concept auch mit einer aktuellen Version von Vim immer funktioniert, wenn der Benutzer *
im Einfügemodus durch Eingabe von ( Ctrl- R*) aus dem Register einfügt . Dies gilt auch für GVim, bei dem zwischen typisierten und eingefügten Eingaben unterschieden werden kann. In diesem Fall überlässt Vim es dem Benutzer, dem Inhalt seines Registers zu vertrauen. Verwenden Sie diese Methode also niemals, wenn Sie von einer nicht vertrauenswürdigen Quelle einfügen (das ist etwas, was ich häufig mache - aber ich habe jetzt begonnen, mich selbst dazu zu schulen, dies nicht zu tun).
Verwandte Links
Fazit
Verwenden Sie den normalen Modus, wenn Sie Text (aus den Registern +
oder) *
einfügen.
... oder benutze Emacs. Ich höre, es ist ein anständiges Betriebssystem. :)