为什么“ AcceptEnv *”不安全?


12

在中/etc/ssh/sshd_config,有一个名为的选项AcceptEnv,允许ssh客户端发送环境变量。我需要能够发送大量环境变量。这些更改来自客户端的每个连接,因此将它们放在服务器上的登录脚本中会更加困难。

我读过那"AcceptEnv *"是不安全的。我想了解为什么在尝试获取所有试图设置为放置在那里的环境变量的列表之前。

为什么认为它不安全?我可以举个例子吗?

Answers:


11

启用环境处理可以使用户使用诸​​如LD_PRELOAD之类的机制绕过某些配置中的访问限制。

并非sshd_config的手册页的所有版本都提到了这一点。如果您的环境变量事先被更改,并且某些特权进程使用由此指定的新库执行,则可能导致问题。

看一下http://www.dankalia.com/tutor/01005/0100501004.htm并搜索“ LD_PRELOAD Exploit”。抱歉,该页面没有锚链接。

另请参见此StackOverflow问题,“ LD_PRELOAD技巧是什么?

在连接后设置环境变量是可以的,但是当ssh守护程序按照AcceptEnv的设置解释这些变量时,可能会发生不良情况。


1
与他们登录后手动设置变量时有什么不同?
约瑟夫·加文2015年

1
@JosephGarvin,某些系统具有受限制的shell或仅允许单个特定命令,例如“ they” 不能。因此,关注点在于提供一种可以绕过这种安全措施的手段。
Charles Duffy

0

不接受环境变量:

请参阅最近出现的Shellshock攻击。如果您接受环境变量,那么您正在打开一个非常讨厌的漏洞。


1
您正在传播对IMO的恐惧。如果您担心他们为什么拥有SSH访问权限?而且,一旦它们进入外壳甚至函数中,就无法阻止它们设置环境变量。该漏洞利用是通过诸如nginx之类的未经授权的shell访问,而不是通过授权的shell访问。
乔登·贝德韦

无论如何,您接受至少一个环境。名为TERM的变量。可能确实需要接受其他变量,例如PRINTER,EDITOR,PAGER等...
ibre5041 2015年

@JordonBedwell,并非每个SSH连接都授权进行Shell访问。我有几个系统,其中有一些帐户,唯一的身份验证是使用SSH密钥进行的,该密钥仅允许运行一个特定的命令(使用该密钥所有者的身份以及其他详细信息)。
Charles Duffy

......也就是说,我同意,截至2017年,ShellShock在这里已经被夸大了。在当前的实现中,生成导出的函数不仅需要控制环境变量的,还需要控制其名称(并且在Shell启动期间评估导出的函数的过程本身不再容易受到注入攻击)。
Charles Duffy
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.