GNU Bourne Again Shell (bash)的 Shellshock 漏洞影响了广泛使用 bash 的 Unix/Linux 服务器,由于它允许远程执行代码获得与系统管理员相同的权限去控制系统而被认为破坏力超过 Heartbleed。而更糟糕的是,bash 官方补丁没有完全修复问题。为何修复 Shellshock 漏洞就像打地鼠,堵了一头另一头又冒出?Shellshock 漏洞的工作原理是:攻击者可以向任何使用 bash 交互的系统如 Web 服务器、Git 版本控制系统和 DHCP 客户端发送请求,请求包含了以环境变量储存的数据。环境变量就像是操作系统的剪切板,储存了帮助系统和软件运行的信息。在本案例中,攻击者发送的请求是精心构造的,诱骗 bash 将其视为命令,bash 像平常执行良性脚本那样执行命令。
这种欺骗 bash 的能力就是 Shellshock 漏洞。官方发布的补丁被发现仍然存在相似的漏洞。计算机科学家 David A. Wheeler 在邮件列表上指出,bash 的解析器存在许多漏洞,因为它在设计时就没有考虑过安全性,除非它停止解析环境变量,否则修正就像是打地鼠。Wheeler 建议打上非官方的补丁修正 bash,这些补丁会破坏向后兼容性。其中一个补丁来自德国计算机安全专家 Florian Weimer,他的补丁为 bash 函数加入前缀,防止它们被指明为系统变量。另一个补丁来自 NetBSD 开发者 Christos Zoulas 博士,他的补丁只允许 bash 在收到明确请求时输入环境变量,消除安全风险。FreeBSD 的 bash 实现则在最新的修正中默认关闭了输入功能。Wheeler 等人相信,虽然破坏了向后兼容性,但不会影响太多的 bash 依赖系统。苹果的 OS X 系统也存在 Shellshock 漏洞,苹果表示大部分用户不会面临风险,只有配置了 advanced UNIX services 的用户会受到影响。OS X 使用了 v3.2.51.(1) 的 GNU bash,新版本 bash 许可证换到了条款更严格的 GPLv3,所以苹果仍然使用旧版本。