由于其范围和严重性,它被设计为该漏洞的典型答案。 br />
#1 楼
Bash是什么?Bash是Ubuntu中默认的交互式shell。当您与终端连接时(通过终端仿真器,通过tty或ssh),通常会键入
bash
将读取并执行的命令。即使您根本不使用终端,您仍然可以使用Bash。在Ubuntu上,
/bin/sh
并不是bash(是破折号)。只有bash受此漏洞影响。漏洞利用对我有何影响?用户,在硬盘上查找程序的位置以及其他此类功能。通过设计具有特定结构的环境变量,攻击者可能能够在Bash下次启动时执行代码。
攻击者可以通过多种方式设置该环境变量:正如Mitre所警告的那样,使用sshd
ForceCommand
选项是一种攻击手段。外壳不是bash的帐户不会受到影响。欺骗您设置环境变量。
使另一个程序将环境变量设置为具有该特定值。例如,您可能有一个Web服务器和脚本,需要使用特定的用户内容设置环境变量。即使该脚本创建了自己的脚本,并且不涉及其他环境变量,也足够了。具有任何名称和特定值的单个环境变量足以使漏洞利用成功。出于任何原因,攻击者的代码都会运行。对于
bash
尤其如此,因为它以超级用户身份生成bash(管理用户规则,可以完全控制计算机的数据和程序)。即使仅以标准用户身份启动bash,也可以删除该用户的文件。重要的是要注意,即使您自己不使用bash,许多程序也会在操作过程中自行生成bash。即使在这种情况下,您也很脆弱。但是,Ubuntu的
sudo -s
不是bash,因此仅显式调用bash的程序不受默认脚本外壳的影响。根据Mitre:
我容易受到攻击吗?
使用dpkg检查您已安装的软件包版本:打包,然后过滤输出以仅向您显示版本。固定版本是
/bin/sh
,bash
和4.3-7ubuntu1.4
。例如,我看到:dpkg -s bash | grep Version
,可以确定我不容易受到攻击。
我如何更新?
标准更新管理器将为您提供此更新。无论您使用什么操作系统或维护程度如何,这都是安全更新的重要性的主要示例。
USN公告指出,已为Ubuntu 14.04 Trusty Tahr发布了新版本, 12.04精确的穿山甲和10.04清醒的山猫。如果您不是使用这些LTS版本中的一个,而是使用了相当新的版本,则很可能能够找到修补的软件包。
首先,检查您是否
如果您容易受到攻击,则应首先获取最新的软件包列表:
wlan1-loopback% dpkg -s bash | grep Version
Version: 4.3-7ubuntu1.4
第一个命令可确保您拥有包含以下内容的最新软件包列表:固定版本,第二个命令将安装最新版本(固定)的bash。
虽然该错误似乎仅在生成bash时才起作用,但在可行的情况下,立即重新启动仍然是一个好主意。
评论
抱歉,您很脆弱。原始补丁无法解决整个问题。请参阅cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 AFAIAA,目前没有公开可用的修复程序。参见例如people.canonical.com/~ubuntu-security/cve/pkg/bash.html
–莫尔梅吉尔
2014-09-25 6:42
@hexafraction您从哪里读到12.10对此进行了更新?我认为不是,12.10、13.04、13.10的使用寿命很长!而且,反向端口存储库也不用于安全更新。
– Gertvdijk
2014-09-25 13:39
@hexafraction不,他们没有!这就是终止生命的全部要点:不再支持。
– Gertvdijk
2014-09-25 13:41
@MichaelHärtl如果您使用的是Ubuntu 12.10,则可以从packages.ubuntu.com/precise/bash下载bash的12.04版本并手动安装。
–大卫
2014-09-25 21:37
更新管理器中提供了CVE-2014-7169修复程序(对我而言)。
–卡尔马留斯
2014-09-26 9:51
#2 楼
在Hacker News上偷了这本书。如果您在使用像我这样的存储库(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
如果你得到了:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
那么你都很好!
警告:make install将在b4312079q中安装bash,因此
/usr/local/bin
不会被修改并且可以从curl中调用!评论
以下是在Debian Lenny上使用补丁构建bash 3.2的方法:gist.github.com/mattwhite/86de50d30134129e44ef
–马特·怀特
2014-09-25 3:47
-1。无需从源代码构建。 Ubuntu在存储库中有一个安全补丁。如果您有“仓库问题”,请改正它。如果不进行安全升级,您可能会在许多方面受到威胁!
– Gertvdijk
2014-09-25 8:21
@马特·怀特谢谢!您刚刚救了我几个小时:)
–弗洛里安·菲达(Florian Fida)
2014年9月25日上午10:09
@FlorianFida这是AskUbuntu!希望该站点上的每个人都能在使用Ubuntu的范围内发布答案。
– Gertvdijk
2014-09-25 10:11
@MichaelHärtl12.10即将终止。很长时间以来,它不再接收任何安全更新。升级!!!
– Gertvdijk
2014-09-25 13:38
#3 楼
注意:CVE-2014-7169的安全修补程序已作为标准安全更新发布。无需添加其他ppa即可接收此补丁。仅需要以下内容。sudo apt-get update
sudo apt-get upgrade
为确保正确修补bash,请运行以下命令
dpkg -s bash | grep Version
如果使用14.04 LTS,应该看到以下输出:
Version: 4.3-7ubuntu1.4
如果使用12.04 LTS,那么输出应该是:
Version: 4.2-2ubuntu2.5
评论
这是正确的,但是现已提供了官方补丁程序,因此安全更新已发布。因此,这些步骤不再是必需的。
–罗比·巴萨克(Robie Basak)
2014-09-26 9:36
这是对的。我将编辑以上帖子。谢谢。
–branch.lizard
2014年9月26日在12:01
#4 楼
如果您使用的是11.04:请使用以下步骤(对我有用)cd ~/
mkdir bash
wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
如果未下载所需补丁,请安装ftp软件包
apt-get install ftp
for i in $(seq -f "%03g" 0 25); do wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
for i in $(seq -f "%03g" 0 25);do patch -p0 < ../bash43-$i; done
./configure && make && make install
apt-get install build-essential
./configure && make && make install
查看是否已应用补丁:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
#5 楼
我正在使用Natty 11.04,这是EOL(并且我已经更新了/etc/apt/sources.list以使用old-releases.ubuntu.com),所以我必须从源代码进行构建。我想构建一个.deb,因此至少包管理是“意识到”的,bash版本不是默认版本。我不是100%成功的-但是,该软件包被注册为“较新的”,并且bash
二进制文件最终被修复,所以这是我的工作:apt-get source bash
wget https://gist.githubusercontent.com/drj11/e85ca2d7503f28ebfde8/raw/31bd53ed2e47b220d3c728f5440758e0f76769de/gistfile1.c -O bash_CVE-2014-6271.patch
wget https://gist.githubusercontent.com/drj11/239e04c686f0886253fa/raw/046e697da6d4491c3b733b0207811c55ceb9d927/gistfile1.c -O bash_CVE-2014-6271_plus.patch
cd bash-4.2/
现在在(子)目录
bash-4.2/
中,有:一个文件bash-4.2.tar.xz
,需要解压缩才能到达bash
源;和一个名为debian
的子目录。为了避免依赖于
texlive
,我进行了以下更改:在bash-4.2/debian/control
中: bash-4.2/debian/rules
:Source: bash
...
Build-Depends: autoconf, autotools-dev, patch, bison, libncurses5-dev,
# texinfo, debhelper (>= 5), texi2html, locales, gettext, sharutils, time, xz-ut
ils
debhelper (>= 5), locales, gettext, sharutils, time, xz-utils
# Build-Depends-Indep: texlive-latex-base, ghostscript
Build-Depends-Indep: ghostscript
要更改版本,请在此
bash-4.2/
目录中执行:binary-doc: bash-install #bash-doc-build
dh_testdir
dh_testroot
mkdir -p $(d_doc)/usr/share/doc/$(p)
dh_installdocs -p$(p_doc)
ifeq ($(with_gfdl),yes)
#cp -p build-bash/doc/bashref.pdf $(d_doc)/usr/share/doc/$(p)/.
#dh_link -p$(p_doc) \
# /usr/share/doc/$(p)/bashref.pdf /usr/share/doc/$(p_doc)/bashref.pdf
else
rm -f $(d_doc)/usr/share/doc-base/bashref
endif
rm -f $(d_doc)/usr/share/info/dir*
#cp -p build-bash/doc/bash.html build-bash/doc/bash.pdf \
# $(d_doc)/usr/share/doc/$(p)/
#dh_link -p$(p_doc) \
# /usr/share/doc/$(p)/bash.html /usr/share/doc/$(p_doc)/bash.html \
# /usr/share/doc/$(p)/bash.pdf /usr/share/doc/$(p_doc)/bash.pdf
dh_installchangelogs -p$(p_doc) bash/CWRU/changelog
...
。 。并在询问时填写更改日志中的注释。这样可以确保调用.deb(和相关的元数据)(在我的情况下)为
bash_4.2-0ubuntu3patchCVE1_i386.deb
。然后,您可以尝试使用dpkg-buildpackage -us -uc
或debuild
命令进行构建。注意-这些都将重新从zip中解压缩源-因此将覆盖您可能拥有的所有补丁!不过,请运行其中之一,以便解压缩并构建源(请注意,由于texlive,最终debuild
可能仍会失败,但应解压缩并构建源)。 然后应用补丁;请注意,您应该在此处使用
-p1
,因为当前您位于bash-4.2/
目录中: 这将重建可执行文件;要测试它:
bash-4.2$ dch --local patchCVE
要生成.deb文件,请运行:
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271.patch
bash-4.2$ patch -p1 < ../bash_CVE-2014-6271_plus.patch
这将保存父目录中的.deb文件;列出其内容:
bash-4.2$ fakeroot debian/rules build
要安装.deb:
bash-4.2$ env VAR='() { :;}; echo Bash is vulnerable!' ./build-bash/bash -c "echo Bash Test"
但是,由于某种原因,此.deb包含未修补的二进制文件(?!),因此我不得不另外执行以下操作:
测试开始为我正确通过:
bash-4.2$ fakeroot debian/rules binary
评论
问题:原始问题指出1种可能的攻击媒介为“未指定的DHCP客户端执行的脚本”。这是什么意思?这是否意味着Ubuntu的/ sbin / dhclient <-容易受到攻击?
–麸皮
2014年10月10日,下午1:29
我认为未指定的客户端可能意味着,Ubuntu感染了/ sbin / dhclient,然后运行命令导致bash脚本启动shellshock。那是什么DHCP客户端容易受到Shellshock的攻击? (希望如此,请参阅我从10月10日开始的上述消息)
–麸皮
14-10-23在4:06
评论
“我如何解决它?” ->只需运行您的升级管理器!确实,Ubuntu发布了安全更新,有专门的安全团队。请不要发布有关从源代码构建Bash的答案!不必要地复杂,将来也很难维护您的系统。另外,还有针对不完整修复程序的其他CVE。 CVE-2014-7169
请发布有关从源代码构建的答案。无论是否应该,有些人都拥有古老的Ubuntu服务器,从源代码构建可能是他们唯一的选择。
抱歉,我只是意识到我在测试中放了bash而不是破折号。没关系,这很好。
阅读:oss-sec:回复:CVE-2014-6271:通过bash远程执行代码。 Bash错误仍未得到修复