OSSN/OSSN-0030
Bash 'shellshock' 漏洞可能导致代码注入漏洞
总结
GNU Bash shell (4.3 及更低版本) 中的一个漏洞会通过精心构造的环境变量(Shellshock, CVE-2014-6271, CVE-2014-7169)暴露代码注入漏洞。通过 SSH 和启用 CGI 的 Web 服务器等网络工具,此漏洞可能被远程利用。Bash 几乎普遍存在于所有 Linux 发行版以及 Apple OS X 中。
受影响的服务 / 软件
GNU Bash, Grizzly, Havana, Icehouse
讨论
GNU Bash shell (4.3 及更低版本) 容易受到通过设置环境变量进行的代码注入攻击。这源于 bash 处理环境中存在的函数定义的方式存在一个错误,示例如下:
env x='() { :;}; echo vulnerable' bash -c 'echo hello'
执行时,此命令行将打印
vulnerable hello
发生此行为是因为 bash 在函数定义之后继续处理变量字符串的其余部分,变量的名称也不重要。
Linux 安装上的许多程序会“shell out”以启动辅助命令。如果恶意用户可以在生成的 shell 中设置环境变量,他们就可以以与合法命令相同的用户权限执行任意命令。如果这些程序连接到网络,则此漏洞变得可远程利用。为了说明如何实现这一点,请考虑 OpenSSH 强制命令机制。该机制允许通过 SSH 运行的命令仅限于特定的调用,但是 OpenSSH 会在执行强制命令之前将环境变量“SSH_ORIGINAL_COMMAND”设置为用户请求的命令。如果“SSH_ORIGINAL_COMMAND”包含上述形式的函数定义,则无论指定的强制命令是什么,bash 都会执行它。
请注意,有许多可远程访问的程序可能会在生成 bash 子进程之前设置一个或多个环境变量,已知示例包括但不限于
- 启用 CGI 的 Web 服务器 (Apache mod_cgi, nginx 等)
- SSH (OpenSSH 机制如上所述)
- DHCP (dhcpcd)
OpenStack 软件本身目前尚未被认为直接受到影响,但 OpenStack 的部署很可能在许多地方使用 GNU Bash。虽然像 rootwrap 这样的机制会过滤环境变量,但任何可以通过用户提供输入设置的变量都可能成为潜在的安全问题。
建议的操作
由于 bash shell 的普遍性及其通过其他程序的间接使用,强烈建议所有系统、访客和虚拟机镜像立即更新到 bash 的修补版本。有关更多详细信息,请参阅您的特定 Linux 发行版提供商的指南。
此外,应配置网络过滤和 IDS 系统以检测包含类似 bash 函数定义的传入请求。还应检查系统日志中是否存在任何此类字符串,以作为可能攻击的迹象。
联系方式 / 参考文献
- 作者:Tim Kelsey, HP
- 本 OSSN:https://wiki.openstack.org/wiki/OSSN/OSSN-0030
- 原始 LaunchPad Bug:https://bugs.launchpad.net/ossn/+bug/1374055
- OpenStack Security ML:openstack-security@lists.openstack.org
- OpenStack Security Group:https://launchpad.net/~openstack-ossg
- 初始 CVE:http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271
- 次要 CVE:http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-7169