Vimはコピーアンドペースト攻撃の影響を受けませんか?


112

あなた必要がありますウェブから自分の端末に貼り付けることはありません。代わりに、テキストエディターに貼り付け、コマンドを確認してからターミナルに貼り付けてください。

大丈夫ですが、Vimが私のテキストエディタである場合はどうでしょうか。Vimをコマンドモードに切り替えて悪意のあるコマンドを実行するコンテンツを偽造できますか?


2
@ryekayoコマンドをバックグラウンドで実行する方法を知っています。問題は、コマンドモードに挿入モードからVimを切り替えて、その後何も実行することが可能である場合の詳細です
アダムTrhon

3
Vimの最近のバージョンには、この種の攻撃を防ぐためのペーストが含まれています。
桂佐藤

2
@EmilJeřábek投稿内のリンクは、丘を走るのではなく、丘を走る十分な理由を提供します。
桂佐藤

1
@EmilJeřábekエスケープ文字を使用して非表示のテキストを偽造できるため、EOFを使用してテキストを偽造することもできます。次に、非表示のテキストにのようなものを含めることができます/bin/bash ; EOF rm -rf ~。ターミナルに貼り付けると、bashが起動し、終了してからホームが削除されます。catに貼り付けると、catにコマンドを出力させ、catを終了して家を削除します。
アダムトロン

回答:


106

簡単な答え:多くの場合、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- - ShiftVほとんどの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を使用します。まともなオペレーティングシステムだと聞いています。:)


2
Vimに貼り付ける前に、pasteモード(:set paste)を有効にする必要があります。そして、括弧ペーストは、あなたの端末がいることを提供し、効果を取る必要があります、それをサポートしています。pasteモードが有効な場合、概念実証は機能しません。

1
貼り付けられた貼り付けモードが安全かどうかわかりません。攻撃者がブラケットペーストを使用していることを知っている場合、彼らは単に\e[201~ペーストコマンドにシーケンスを貼り付けてブラケットペーストモードを終了し、とにかくあなたをpwnに進めます。(ブラケットペーストがどのように機能するかの詳細を逃した場合を
除き

2
@SatoKatsura:Vim 8.0.540で試してみましたが、元の攻撃に対して脆弱ではありませんでした。を追加した後\x1b[201~、エクスプロイトは以前のように機能しました(つまりls -la、バッファにのみ書き込まれ、echomコマンドが実行されました)。したがって、括弧でくくられたペーストは依然として標的型攻撃に対して脆弱であり、十分に強力なソリューションではないと思います。(実際、あらゆる形式の帯域内シグナリングは脆弱です!)
nneonneo

2
ありとなしの両方で試してみました:set paste-エクスプロイトはまだ機能しています。完全に明確にするために、次の(base64でエンコードされた)blobを貼り付けましたbHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=。OS Xでは、それをコピーし、実行pbpaste | base64 -D | pbcopyしてに貼り付ける未加工バージョンを取得できますvim
-nneonneo

1
さらに明確にするために、macOS Terminal.appを使用して、Ubuntu 16.04ボックスへのSSH接続でテストしています。ターミナルエミュレータが貼り付け時にエスケープシーケンスを削除している場合は、おそらくシーケンス(たとえば\x1b\x1b[201~[201~)を入れ子にするか、フィルタを欺くことができます。
-nneonneo

0

X11クリップボード機能またはプラットフォーム固有の同等機能を使用していて、マウスサポートが有効な状態で中ボタンペーストを使用するか、vim pasteコマンドを使用し、ターミナルペーストコマンド(shift-middle-buttonまたはターミナルのショートカット)を使用しない場合提供)あなたは安全かもしれません。

そうでない場合は、ブラケットペーストモードをサポートするターミナルエミュレータがあり、ターミナルとvimでそれを有効にし、そのターミナルエミュレータがブラケットペーストモードを終了するエスケープシーケンスの挿入に対する保護を実装している場合、あなたは安全かもしれません。

そうでない場合、ここで説明する攻撃に対して脆弱である可能性があります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.