手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

Bash 通过特殊环境变量进行代码注入攻击

[日期:2014-09-26] 来源:oschina.net  作者:鑫鑫鑫 [字体: ]

Bash 或Bourne again shell,是一个类UNIX shell 脚本,可能是任何Linux系统中最常见的安装组件。从1980年诞生到现在,bash 已经从一个简单的基于终端的命令解释器演进到诸多其他的奇特用途。

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

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

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

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

  • 执行mod_php的PHP脚本即使大量产生子shell也不会收到影响。 

  • 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的这个问题。Fedora也运送了问题修复包。

Gitlab-shell 受 Bash CVE-2014-6271 漏洞影响  http://www.linuxidc.com/Linux/2014-09/107181.htm

Linux再曝安全漏洞Bash 比心脏出血还严重 http://www.linuxidc.com/Linux/2014-09/107176.htm

解决办法是升级 Bash,请参考这篇文章http://www.linuxidc.com/Linux/2014-09/107182.htm

关于受影响的特定Red Hat产品的更多信息可以在https://access.redhat.com/site/solutions/1207723找到。

CentOS的信息可以在 http://lists.centos.org/pipermail/centos/2014-September/146099.html找到。

本文永久更新链接地址http://www.linuxidc.com/Linux/2014-09/107225.htm

linux
相关资讯       bash  Bash变量 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款