ウェブから端末に貼り付けないでください 。代わりに、テキストエディターに貼り付け、コマンドを確認してからターミナルに貼り付けます。
それで問題ありませんが、Vimが私のテキストエディタである場合はどうでしょうか。 Vimをコマンドモードに切り替えて悪意のあるコマンドを実行するコンテンツを偽造できますか?
短い回答:多くの状況で、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 uttingすると、フルテキスト(非表示部分を含む)が貼り付けられます。これは、挿入モード(: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 (Mac OS X)、 Shift-Insert またはマウスの中ボタンをクリックします。
後でLubuntu 16.04デスクトップマシンからいくつかのテストを行いましたが、結果がわかりにくく、結論が出ませんでした。これは常にGNU screenを使用しているためですが、screenが使用するエスケープシーケンスをフィルター処理していることがわかりました括弧付きの貼り付けモードを有効/無効にします( patch がありますが、プロジェクトがアクティブに維持されていないときに送信されたようです)。私のテストでは、Vimを実行しているときにGNU screen)で概念実証が常に機能します。
さらにテストが役立つでしょうが、これまでのところ、GNU screenが関連するエスケープシーケンスをブロックしていない限り、ターミナルエミュレータによるブラケットペーストモードのサポートが私の概念実証をブロックすることがわかりました。ただし、ユーザーnneonneoreports エスケープシーケンスを注意深く作成して、括弧付きの貼り付けモードを終了することができます。
Vimの最新バージョンでも、ユーザーが*
レジスタから貼り付け、挿入モードで(Ctrl-R*)。これは、タイプされた入力と貼り付けられた入力を区別できるGVimにも適用されます。この場合、Vimは登録内容の信頼をユーザーに任せます。そのため、信頼できないソースから貼り付ける場合は、この方法を使用しないでください(これはよく行うことですが、今では自分でトレーニングを始めていません)。
(+
または*
レジスタから)テキストを貼り付ける場合は、通常モードを使用します。
…またはEmacsを使用します。それはまともなオペレーティングシステムだと聞いています。 :)
X11クリップボード機能またはプラットフォーム固有の同等機能を使用していて、マウスサポートが有効になっている中央ボタンの貼り付け、またはvim貼り付けコマンドを使用し、ターミナルの貼り付けコマンド(shift-ミドルボタンまたはターミナルのショートカット)を使用していない場合オファー)その後、あなたは安全かもしれません。
そうでない場合は、ブラケット貼り付けモードをサポートするターミナルエミュレータがあり、それをターミナルとvimで有効にし、そのターミナルエミュレータがブラケット貼り付けモードを終了するエスケープシーケンスの挿入に対する保護を実装している場合、その後、あなたは安全かもしれません。
そうでない場合は、説明されている攻撃に対して脆弱である可能性があります here 。