簡単な答え:多くの場合、Vimはこの種の攻撃に対して脆弱です(挿入モードでテキストを貼り付ける場合)。
コンセプトの証明
リンクされた記事を出発点として使用して、HTMLスパン要素とCSSを使用してテキストの中央部分を非ls -la
表示にして、カジュアルビューアーのみに表示されるように、次のコードでWebページをすばやく作成できました(ソース)。注:^[
はエスケープ文字で、^M
は復帰文字です。Stack Exchangeはユーザー入力をサニタイズし、CSSを使用したコンテンツの非表示から保護するため、概念実証をアップロードしました。
ls ^[:echom "This could be a silent command."^Mi -la
挿入モードでこのテキストをターミナルVimに貼り付けた場合(いくつかの修飾子を付けて、以下を参照)、表示されls -la
ますが、:messages
コマンドを実行すると、非表示のVimコマンドの結果が表示されます。
防衛
この攻撃を防ぐには、通常モードのままにし、"*p
またはを使用して貼り付けるのが最善"+p
です。ノーマルモードでは、p個のレジスタからウッティング・アム・アンマーゼーテキスト、(隠れた部分を含む)のフルテキストが貼り付けられます。これは、(挿入モード:set paste
が設定されている場合でも)挿入モードでは発生しません。
括弧付き貼り付けモード
Vimの最近のバージョンは、このタイプのコピーペースト攻撃を軽減するブラケットペーストモードをサポートしています。佐藤桂は、「ブラケットペーストのサポートはVim 8.0.210で登場し、最近ではバージョン8.0.303(2017年2月2日リリース)で修正されました」と明言しました。
注意:私はそれを理解し、括弧ペーストモードをサポートするのVimのバージョンがすべき使用して貼り付けたときにあなたを守るCtrl- - Shift(VほとんどのGNU / Linuxデスクトップ環境を)、Ctrl- V(MS Windowsの場合)、Command- V(マックOS X)、Shift- Insertまたはマウス中クリック。
テスト中
後でLubuntu 16.04デスクトップマシンからいくつかのテストを行いましたが、結果は混乱して決定的ではありませんでした。私はので、これは私がいつも使用しているためであることに気づきましたGNU画面をしかし、それはその判明画面を有効にするために使用エスケープシーケンスをフィルタリング/括弧ペーストモードを無効(があるパッチが、それは時に提出されたように見えますプロジェクトは積極的に維持されていませんでした)。私のテストでは、Vimまたはターミナルエミュレーターがブラケットペーストモードをサポートしているかどうかに関係なく、GNUスクリーンを介してVimを実行するときに、概念実証が常に機能します。
さらにテストすることは有用ですが、これまでのところ、ターミナルエミュレータによるブラケットペーストモードのサポートは、GNU画面が関連するエスケープシーケンスをブロックしていない限り、私の概念実証をブロックすることがわかりました。ただし、ユーザーnneonneo は、ブラケットペーストモードを終了するために、エスケープシーケンスを慎重に作成することができると報告しています。
Vimの最新バージョンであって*
も、挿入モードで(Ctrl- R*)を入力してユーザーがレジスタから貼り付けると、概念実証が常に機能することに注意してください。これは、入力の入力と貼り付けを区別できるGVimにも適用されます。この場合、Vimはユーザーに登録内容の内容を信頼するように任せます。そのため、信頼できないソースから貼り付けるときにこの方法を使用しないでください(これはよく行うことですが、今ではしないように自分でトレーニングを開始しています)。
関連リンク
結論
(+
または*
レジスタから)テキストを貼り付けるときは、通常モードを使用します。
…またはEmacsを使用します。まともなオペレーティングシステムだと聞いています。:)