Linux Bash漏洞验证以及修复方式
一. 漏洞简介
这个漏洞产生于Shell在处理函数定义时,执行了函数体之后的命令。利用漏洞可进行构造特殊“变量=函数”的方式绕开系统本身环境变量执行远程攻击。
二. 漏洞验证方式:
1 2 3 4 5 6 7 |
[root@localhost ~]# env x='() { :;}; echo vulnerable' bash -c "echo this is a test" vulnerable this is a test [root@localhost ~]# |
三. 涉及操作系统
CentOS系列、Ubuntu系列、Debian系列
四. 涉及业务场景
1、OpenSSH sshd使用了ForceCommand特性
ForceCommand特性用来给远程用户提供受限的命令执行能力,因此使用了此特性的如git、subversion等都会受影响。
2、Apache HTTP Server使用了modcgi和mod_cgid模块
在Apache Server启用了modcgi和mod_cgid模块时,只要CGI脚本是由bash编写,或者使用了派生的subshell都会受影响。能够产生这样的subshell的包括:
C语言的system/popen,Python的os.system/os.popen,PHP的system/exec,Perl的open/system。
五. 漏洞修复方式:
1. Ubuntu 操作系统更新bash:
1 2 3 |
apt-get update #更新ubuntu源 apt-get install bash#安装bash最新版本 |
2. Centos 操作系统更新bash:
1 2 3 4 5 |
yum clean all #清理本地源缓存 yum makecache #重建本地缓存 yum --enablerepo=updates install bash#更新安装bash新版本 |
3. Novell suse 操作系统更新bash:
zypper sa Suse源地址#找到suse官方网站最新源站加入到suse源中
zypper in bash #安装bash新版本
六. 验证漏洞:
存在漏洞:
[root@localhost ~]# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Vulnerable #“(){ :;};”构造一个空的函数结尾加入任何
this is a test #一段代码将会被执行
[root@localhost ~]##表示存在漏洞
不存在漏洞:
1 2 3 4 5 6 7 8 9 |
[root@localhost ~]# 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 #不能被定义 [root@localhost ~]# |