Vim不受复制粘贴攻击的影响吗?


112

绝对不应从Web粘贴到终端。相反,您应该粘贴到文本编辑器,检查命令,然后粘贴到终端。

可以,但是如果Vim是我的文本编辑器怎么办?能否伪造一种内容,将Vim切换到命令模式并执行恶意命令?


2
@ryekayo我知道如何在后台运行命令。问题更多地是关于是否有可能将vim从插入模式切换到命令模式,然后执行任何操作
Adam Trhon

3
Vim的最新版本在括号中粘贴,可以防止这种攻击。
佐藤桂

2
@EmilJeřábek文章中的链接为您提供了奔跑而不是奔跑的充分理由。
佐藤桂

1
@EmilJeřábek因为您可以使用Escape字符伪装隐藏的文本,所以我想您也可以使用EOF伪造文本。然后,隐藏的文本可能包含/bin/bash ; EOF rm -rf ~。当粘贴到终端时,它将开始bash,将其终止,然后删除您的家。粘贴到cat中后,它将使cat打印命令,结束cat并删除您的房屋。
亚当·特洪

Answers:


106

简短的答案:在许多情况下,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。在正常模式下,当p从寄存器文本的Utting,全文(包括隐藏的部分)被粘贴。即使:set paste已设置了“插入”模式,也不会发生相同的情况。

包围粘贴模式

Vim的最新版本支持带括号的粘贴模式,可减轻这种类型的复制粘贴攻击。Sato Katsura澄清说:“在Vim 8.0.210中提供了对带括号粘贴的支持,并且最近已在8.0.303版本(2017年2月2日发行)中修复。”

注:根据我的理解,与括号粘贴模式支持Vim版本使用粘贴时保护你Ctrl- - ShiftV大多数GNU / Linux桌面环境),Ctrl- V(微软视窗),Command- V键(Mac 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~在粘贴命令中粘贴一个序列即可退出包围式粘贴模式,然后继续对您进行伪装。(除非我错过了有关方括号粘贴工作原理的一些细节?)
nneonneo

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通过SSH连接到Ubuntu 16.04机器进行测试。如果您的终端仿真器正在剥离粘贴中的转义序列,则可能会嵌套该序列(例如\x1b\x1b[201~[201~)或使过滤器蒙混的内容。
nneonneo

0

如果您使用的是X11剪贴板功能或特定于平台的等效功能,并且使用启用了鼠标支持的中间按钮粘贴或vim粘贴命令,而不使用任何终端粘贴命令(shift-middle-button或终端的任何快捷方式)报价),那么您可能会很安全。

如果不是,那么如果您有一个支持方括号粘贴模式的终端仿真器,并且已在您的终端和vim中启用了它,并且该终端仿真器实现了防止注入以方括号粘贴模式结尾的转义序列的保护,那么您可能会很安全。

如果不是,那么您可能容易受到此处描述的攻击的影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.