Bash破壳漏洞

简介

什么是破壳漏洞:

“破壳”是Bash(GNU Bourne Again Shell)中出现的允许攻击者通过环境变量执行任意命令的漏洞。

image

影响范围:

目前已验证Red Hat、 CentOS 、Ubuntu 、Fedora 、Amazon Linux 、OSX10.10均拥有存在CVE-2014-6271漏洞的bash版本,以bash在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用bash的Unix、Linux、MacOSX,针对这些操作系统管理下的数据存在高危威胁。
目前抽样验证当前出厂预装的Andriod操作系统暂不支持ENV命令,可推测针对Andriod操作系统受到此漏洞影响的可能性较小。

解析

漏洞验证

目前的bash脚本是以通过导出环境变量的方式支持自定义函数,也可将自定义的bash函数传递给子相关进程。一般函数体内的代码是不会被执行,但此漏洞会错误的将“{}”花括号外的命令进行执行。

1
env x='() { :;}; echo Vulnerable CVE-2014-6271 ' bash -c "echo test"

漏洞原理

目前的bash使用的环境变量是通过函数名称来调用的,导致漏洞出问题是以“(){”开头定义的环境变量在命令ENV中解析成函数后,Bash执行并未退出,而是继续解析并执行shell命令。核心的原因在于在输入的过滤中没有严格限制边界,没有做合法化的参数判断。

ENV指令:

ENV指令允许临时改变环境变量,即指定本次指令执行的环境变量,这从一定程度上给了黑客进行PATH Hajaking的可能性

ENV指令还允许在设置环境变量后进行指令执行,从某种程度上来说,ENV相当于一个指令执行的指令,同时还附带有临时设置环境变量的功能

ENV的指令执行走的是正常的BASH指令解析、执行流程,而在一个采取了安全配置的服务器上,对敏感指令的执行都是进行用户级别的权限限制的,所以,ENV本身并不是任意指令执行。真正导致命令任意执行的原因是代码注入

具体的env命令,可查看env的man手册和帮助

漏洞可能带来的影响

  1. 此漏洞可以绕过ForceCommand在sshd中的配置,从而执行任意命令。
  2. 如果CGI脚本用bash编写,则使用mod_cgi或mod_cgid的Apache服务器会受到影响。
  3. DHCP客户端调用shell脚本来配置系统,可能存在允许任意命令执行。
  4. 各种daemon和SUID/privileged的程序都可能执行shell脚本,通过用户设置或影响环境变量值,允许任意命令运行。

参考链接

  1. http://www.antiy.com/response/CVE-2014-6271.html#
  2. http://www.freebuf.com/articles/system/50065.html