什么是 CVE-2014-6271 bash 漏洞 (Shellshock),我该如何修复?

nan*_*rad 142 security bash shellshock

最近,有关于“CVE-2014-6271”(参见USN-2362-1)的消息,这是 Bash 中的一个漏洞。我怎么知道我是否受此影响,我该如何解决,我为什么要关心?

由于其范围和严重性,这被设计为针对此漏洞的规范答案。

nan*_*rad 126

什么是 Bash?

Bash 是 Ubuntu 中默认的交互式 shell。当您与终端交互时(通过终端仿真器、通过 tty 或 ssh),您通常键入bash将读取和执行的命令。即使您根本不使用终端,您仍然可以使用 Bash。

在 Ubuntu 上,/bin/sh不是 bash(它是破折号)。只有 bash 受此漏洞影响。

漏洞利用对我有何影响?

Bash 和操作系统会跟踪一组环境变量,这些变量描述了当前登录的用户、在硬盘上的何处查找程序以及其他此类功能。通过制作具有特定结构的环境变量,攻击者可能能够在 Bash 下次启动时执行代码。

攻击者可以通过多种方式设置该环境变量:

  • 使用特定设置(例如 git over ssh)远程连接到服务(例如 SSH)。正如 Miter 警告的那样,使用 sshdForceCommand选项是一种攻击媒介。shell 不是 bash 的帐户不受影响。
  • 诱骗您设置环境变量。
  • 导致另一个程序设置环境变量以具有该精心设计的值。例如,您可能有一个需要设置具有特定用户内容的环境变量的网络服务器和脚本。即使该脚本创建自己的,并且不涉及其他环境变量,也足够了。具有任何名称和精心设计的值的单个环境变量足以使漏洞利用成功
  • 其他方式我这里没有提到。

一旦他们设置了这个变量,下次bash由于任何原因打开时,攻击者的代码就会运行。这对 来说尤其可怕sudo -s,因为它以超级用户身份生成 bash(完全控制计算机数据和程序的管理用户规则)。即使您仅以标准用户身份启动 bash,也可以删除该用户的文件。

需要注意的是,即使您自己不使用 bash,许多程序也会在其操作过程中自行生成 bash。即使在这种情况下,您也很脆弱。但是,Ubuntu/bin/sh不是 bash,因此只有显式调用 bash 的程序而不是默认脚本 shell 会受到影响。

根据米特雷:

向量涉及 OpenSSH sshd 中的 ForceCommand 功能、Apache HTTP Server 中的 mod_cgi 和 mod_cgid 模块、由未指定的 DHCP 客户端执行的脚本,以及在 Bash 执行过程中跨权限边界设置环境的其他情况。

我脆弱吗?

使用 dpkg 检查您安装的软件包版本:

dpkg -s bash | grep Version
Run Code Online (Sandbox Code Playgroud)

这将查找有关您的bash包的信息,并过滤输出以仅显示版本。固定版本4.3-7ubuntu1.44.2-2ubuntu2.54.1-2ubuntu3.4

例如,我看到:

wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4
Run Code Online (Sandbox Code Playgroud)

并且可以确定我不脆弱。

如何更新?

标准更新管理器将为您提供此更新。这是一个很好的例子,说明安全更新的重要性,无论您使用什么操作系统或维护得多么好。

USN公告指出,新的版本已经发布的Ubuntu 14.04忠实的塔尔羊,12.04精确穿山甲和10.04清醒山猫。如果您使用的不是这些 LTS 版本之一,而是使用了相当新的版本,那么您很可能会找到打过补丁的软件包。

首先,检查你是否

如果您易受攻击,您应该首先获取最新的软件包列表:

sudo apt-get update && sudo apt-get install bash
Run Code Online (Sandbox Code Playgroud)

第一个命令确保您拥有包含固定版本的最新软件包列表,第二个命令安装最新(固定)版本的 bash。

虽然这个错误似乎只在 bash 产生时才起作用,但如果可行,立即重新启动仍然是一个好主意。

  • 对不起,**你是脆弱的**。原始补丁并不能解决整个问题。请参阅 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 AFAIAA,目前有 _no_ 公开可用的修复程序。参见例如 http://people.canonical.com/~ubuntu-security/cve/pkg/bash.html (20认同)
  • @hexafraction 你在哪里读到 12.10 收到更新?我不这么认为,**12.10、13.04、13.10 几乎是生命周期的终结**!而且,反向移植存储库**不用于安全更新**。 (4认同)
  • @hexafraction 不,他们没有!这就是生命终结的全部意义:不再有任何支持。 (2认同)
  • 更新管理器中提供了针对 CVE-2014-7169 的修复程序(对我而言)。 (2认同)

小智 27

在 Hacker News 上cft 那里偷走了这个。如果您像我一样(Odroid-XU)在使用存储库时遇到问题,那么如果您想从源代码修补/构建,这应该可以很好地工作。

TMPDIR=/tmp/bash-src
mkdir $TMPDIR
cd $TMPDIR
#download bash
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 999); do 
  wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i
  if [[ $? -ne "0" ]]; then
    MAX=$(expr $i - 1)
    break;
  fi
done
tar zxf bash-4.3.tar.gz 
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 $MAX);do
  echo apply patch bash43-$i
  patch -p0 < ../bash43-$i
done
#build and install
./configure && make
sudo make install
cd ../..
rm -r $TMPDIR
Run Code Online (Sandbox Code Playgroud)

然后运行:

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

如果你得到:

bash: warning: x: ignoring function definition attempt
bash: error importing function definition for `x'
this is a test
Run Code Online (Sandbox Code Playgroud)

那你们都好!


警告: make install 将安装 bash /usr/local/bin,所以/bin/bash不会被修改,可以从 curl 调用!

  • -1. 无需从源代码构建。Ubuntu 在存储库中有一个安全补丁。如果您有“回购问题”,请改正。如果您没有收到安全升级,您可能会在更多方面受到攻击! (13认同)
  • @MichaelHärtl 12.10 是生命终结。很长一段时间以来,它不再接收任何安全更新。升级!!! (6认同)
  • @FlorianFida 这是 AskUbuntu!本网站上的每个人都应该在使用 Ubuntu 的范围内发布答案。 (5认同)

bra*_*ard 9

注意:CVE-2014-7169 的安全补丁已作为标准安全更新发布。无需添加额外的 ppa 即可接收此补丁。只需要以下内容。

sudo apt-get update

sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

为确保您已正确修补 bash,请运行以下命令

dpkg -s bash | grep Version
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 14.04 LTS,您应该会看到以下输出:

Version: 4.3-7ubuntu1.4
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 12.04 LTS,您的输出应该是:

 Version: 4.2-2ubuntu2.5
Run Code Online (Sandbox Code Playgroud)