Security

Vim 對複制粘貼攻擊免疫嗎?

  • April 5, 2019

你不應該從網路粘貼到你的終端。相反,您應該粘貼到文本編輯器,檢查命令,然後粘貼到終端。

沒關係,但是如果 Vim 是我的文本編輯器呢?可以偽造將 Vim 切換到命令模式並執行惡意命令的內容嗎?

**簡短回答:**在許多情況下,Vim 容易受到這種攻擊(在插入模式下粘貼文本時)。

概念證明

使用連結的文章作為起點,我能夠使用以下程式碼快速創建一個網頁,使用 HTML span 元素和 CSS 隱藏文本的中間部分,以便僅對ls -la臨時查看者可見(不查看來源)。注意:^[是轉義字元,^M是輸入字元。Stack Exchange 清理使用者輸入並防止使用 CSS 隱藏內容,因此我上傳了概念證明

ls ^[:echom "This could be a silent command."^Mi -la

如果您處於插入模式並將此文本粘貼到終端 Vim(帶有一些限定符,見下文),您會看到ls -la,但如果您執行該:messages命令,您可以看到隱藏的 Vim 命令的結果。

防禦

為了防禦這種攻擊,最好保持在普通模式並使用"*p或粘貼"+p。在普通模式下,當從寄存器中輸入文本時,會粘貼全文(包括隱藏部分)。在插入模式下也不會發生同樣的情況(即使:set paste)已設置。

括號粘貼模式

最新版本的 Vim 支持括號粘貼模式,可以緩解這種類型的複制粘貼攻擊。Sato Katsura 澄清說“對括號粘貼的支持出現在 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)ShiftInsert滑鼠粘貼時保護您中鍵。

測試

後來我在 Lubuntu 16.04 台式機上進行了一些測試,但我的結果令人困惑且不確定。我已經意識到這是因為我總是使用GNU screen但事實證明screen過濾了用於啟用/禁用括號粘貼模式的轉義序列(有一個更新檔,但看起來它是在項目沒有得到積極維護)。在我的測試中,無論 Vim 或終端仿真器是否支持括號粘貼模式,通過 GNU 螢幕執行 Vim 時,概念驗證始終有效。

進一步的測試會很有用,但到目前為止,我發現終端仿真器對括號粘貼模式的支持會阻止我的概念證明——只要 GNU 螢幕沒有阻止相關的轉義序列。但是,使用者nneonneo 報告說,精心設計的轉義序列可用於退出括號粘貼模式。

請注意,即使使用最新版本的 Vim,如果使用者*在插入模式下通過鍵入 ( Ctrl- R``*) 從寄存器粘貼,概念證明始終有效。這也適用於可以區分鍵入和粘貼輸入的 GVim。在這種情況下,Vim 讓使用者信任他們的寄存器內容。因此,從不受信任的來源粘貼時永遠不要使用這種方法(這是我經常做的事情——但我現在已經開始訓練自己不要這樣做)。

相關連結

結論

粘貼文本時使用普通模式(來自+*寄存器)。

… 或使用 Emacs。我聽說這是一個不錯的作業系統。:)

引用自:https://unix.stackexchange.com/questions/355610