Sie sollten niemals aus dem Internet in Ihr Terminal einfügen . Stattdessen sollten Sie in Ihren Texteditor einfügen, den Befehl überprüfen und dann in das Terminal einfügen.
Das ist in Ordnung, aber was ist, wenn Vim mein Texteditor ist? Könnte man einen Inhalt fälschen, der Vim in den Befehlsmodus versetzt und den böswilligen Befehl ausführt?
security
vim
escape-characters
clipboard
special-characters
Adam Trhon
quelle
quelle
/bin/bash ; EOF rm -rf ~
. Wenn es in das Terminal eingefügt wird, wird die Bash gestartet, beendet und Ihr Zuhause gelöscht. Beim Einfügen in cat gab cat den Befehl aus, beendete cat und löschte Ihr Zuhause.Antworten:
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 .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.quelle
paste
mode (:set paste
) aktivieren, bevor Sie Vim einfügen. Dann sollte die eingeklammerte Paste wirksam werden, sofern Ihr Terminal dies ebenfalls unterstützt. Ihr Proof of Concept funktioniert nicht, wenn derpaste
Modus aktiviert ist.\e[201~
das Einfügen in eckigen Klammern verwenden, setzt er einfach eine Sequenz in den Befehl Einfügen, um den Einfügemodus in eckigen Klammern zu beenden, und fährt trotzdem mit pwn fort. (Es sei denn, ich habe ein paar Details darüber übersehen, wie geklammerte Paste funktioniert?)\x1b[201~
funktionierte der Exploit wie zuvor (dh es wurde nurls -la
in den Puffer geschrieben und derechom
Befehl ausgeführt). Daher denke ich, dass eingeklammerte Paste immer noch anfällig für einen gezielten Angriff ist und keine ausreichend starke Lösung darstellt. (In der Tat ist jede Form von In-Band-Signalisierung anfällig!):set paste
- der Exploit funktioniert immer noch. Um ganz klar zu sein, klebte ich den folgenden (Base64-kodiert) Blob:bHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=
. Unter OS X können Sie das kopieren und ausführenpbpaste | base64 -D | pbcopy
, um eine Rohversion zum Einfügen zu erhaltenvim
.\x1b\x1b[201~[201~
) oder etwas verschachteln , um den Filter zu täuschen.Wenn Sie die X11-Zwischenablage-Funktion oder ein plattformspezifisches Äquivalent verwenden und das Einfügen mit mittlerer Taste und aktivierter Mausunterstützung oder einen Befehl zum Einfügen von VIM und nicht einen Befehl zum Einfügen von Terminals (Umschalt-Mitteltaste oder eine beliebige Verknüpfung zum Terminal) verwenden Angebote), dann könnten Sie sicher sein.
Wenn nicht, haben Sie einen Terminalemulator, der den Modus für das Einfügen in Klammern unterstützt, und Sie haben diesen in Ihrem Terminal und in vim aktiviert. Dieser Terminalemulator implementiert einen Schutz gegen das Einfügen der Escape-Sequenz, die den Modus für das Einfügen in Klammern beendet. dann bist du vielleicht in Sicherheit.
Wenn nicht, sind Sie möglicherweise anfällig für den hier beschriebenen Angriff .
quelle