Bash远程任意代码执行安全漏洞
2014-09-25 15:00:30 阿炯

本站赞助商链接,请多关照。 US-CERT 意识到 Bash 存在一个安全的漏洞,该漏洞直接影响基于 Unix 的系统(如 Linux、OS X 等)。该漏洞将导致远程攻击者在受影响的系统上执行任意代码。建议用户和管理员重新检查这篇红帽的安全博客。更多的详情只能参考相应 Linux 发行商以获取相应补丁。

你可以使用如下命令来检查系统存在此漏洞:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

受影响的系统包括:Redhat与Debian这两大系列。关于该漏洞的演示在乌云平台上可以找到

红帽系可通过更新 bash 并重启系统来解决这个问题:

# yum update bash
或者:
# yum update bash-4.1.2-15.el6_5.1

此举只是更新了 bash 包,还需要重启系统才能生效。

Debian 用户可以通过如下命令打补丁,无需重启:
apt-get update
apt-get install bash

从1980年诞生到现在,bash 已经从一个简单的基于终端的命令解释器演进到诸多其他的奇特用途。

在Linux中,环境变量影响着系统软件。它们都是由一个名称和对名称的赋值构成,bash shell也是如此。在程序后台运行bash shell很常见。通常用于向远程用户提供一个shell(例如通过ssh,telnet),为CGI脚本提供解析器(例如Apache),甚至提供有限的命令执行支持(例如git)。

回到正题,你可以在调用bash shell前使用特殊加工的值创建环境变量,这个事实暴露了系统的脆弱。这些变量可以包含代码,随着shell调用执行。这些加工过的变量名并没有什么,主要是它们的内容。在以下的语境中,脆弱暴露无遗:

sshd配置中使用的ForceCommands环境变量用来向远程用户提供有限的命令执行权限。这个缺陷可以被绕过并提供任意的命令执行权限。一些Git和Subversion部署使用这样的shell。OpenSSH的常规使用不受影响,因为用户已经进入了shell。

使用mod_cgi或mod_cgid的Apache服务器,如果采用bash写或者产生大量的子shell的CGI脚本,将受到影响。C的system/popen,Python的os.system/os.popen,运行在CGI模式下的PHP的system/exec,使用shell的Perl中的open/system可以使用这些子shell。

mod_php模式下的PHP脚本不会受到影响。

DHCP客户端调用shell脚本接收来自潜在的恶意服务器的环境变量参数值配置系统的情况可能允许任意的命令运行,最典型的是作为DHCP客户机上的root。

守护进程和SUID/特权程序可能使用用户设置以及被用户影响的环境变量执行shell脚本,可允许任意的命令运行。任意可能陷入shell险境的其他应用,或是运行shell脚本将bash作为解释器的应用。不引入环境变量的shell脚本是安全的,即使它们处理不安全的内容并存储在(不引入的)shell变量里并打开子shell。

和编程语言一样,Bash也有函数,尽管是有限的实现,这些bash函数可能放入环境变量中,这个缺陷在这些环境变量内部的函数定义尾部附加额外的代码时触发。像这样:
$ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
 vulnerable
 this is a test

补丁修复了这个缺陷,确保bash函数的尾部不允许额外的代码。所以如果你用打过补丁的bash版本运行上面这个例子,应该得到类似这样的输出:
 $ env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
 bash: warning: x: ignoring function definition attempt
 bash: error importing function definition for `x'
 this is a test

我们相信这不应该影响任何的向后兼容。它当然会影响使用如上所述创建的环境变量的任何脚本,但这么做会被认为是糟糕的编程实践。Red Hat的安全问题报告修复了Red Hat企业版Linux的这个问题。

Debian修复Bash漏洞
sudo apt-get update && sudo apt-get install bash
关于受影响的特定Red Hat产品的更多信息可以在这里找到。
CentOS的信息可以在这里找到。


该文章最后由 阿炯 于 2014-10-06 22:16:40 更新,目前是第 2 版。