Linux 系统如何修复 Shellshock 漏洞并验证是否生效

文章导读
修复 Shellshock 漏洞最直接有效的办法是升级系统中的 GNU Bash 到安全版本,适用于所有使用 Bash 作为默认 Shell 的 Linux 服务器。
📋 目录
  1. 快速修复命令
  2. 漏洞原理简述
  3. 分步处理指南
  4. 验证修复是否生效
  5. 常见坑与排查
  6. 参考来源
A A

修复 Shellshock 漏洞最直接有效的办法是升级系统中的 GNU Bash 到安全版本,适用于所有使用 Bash 作为默认 Shell 的 Linux 服务器。

先说结论:该漏洞影响范围广且利用简单,必须优先处理 Bash 版本,不要依赖临时配置修改。

  • 先判断:检查当前 Bash 版本是否位于受影响区间。
  • 优先做:通过包管理器升级 Bash 到发行版提供的安全版本。
  • 再验证:使用特定测试命令确认漏洞是否已被修补。

快速修复命令

如果你需要快速检查和处理,可以直接参考以下命令:

bash `--version`
# CentOS/RHEL
yum makecache && yum update bash
# Ubuntu/Debian
apt-get update && apt-get install `--only-upgrade` bash

漏洞原理简述

Shellshock 漏洞本质上是 GNU Bash 在解析环境变量时的逻辑缺陷。当 Bash 启动时,它会处理形如 VAR=() 的环境变量,漏洞允许攻击者在函数定义后追加恶意命令,这些命令会随着环境变量的导入而被执行。由于 Web 服务器(如 Apache)常通过 CGI 将 HTTP 请求头转化为环境变量传递给 Bash,导致远程代码执行风险。

Linux 系统如何修复 Shellshock 漏洞并验证是否生效

分步处理指南

按照以下步骤进行修复,确保操作可回滚且生效:

  1. 备份当前环境:记录当前 Bash 版本和路径,以防升级后出现兼容性问题。
    rpm -qa | grep bash
    which bash
  2. 更新软件源:确保能获取到最新的安全补丁包,避免更新失败。
    yum makecache
    apt-get update
  3. 执行升级:使用系统包管理器升级 Bash,不要手动编译安装,以免破坏系统依赖。
    yum update bash
    apt-get install `--only-upgrade` bash
  4. 重启相关服务:如果 Bash 被长期运行的服务(如 Web 服务器)调用,建议重启服务以加载新版本的 Bash。
    systemctl restart httpd
    systemctl restart nginx

验证修复是否生效

升级完成后,不要只看版本号,必须通过 Payload 测试确认修复效果。

Linux 系统如何修复 Shellshock 漏洞并验证是否生效

测试命令:

env x='() { :;}; echo vulnerable' bash -c "echo test"

结果判断:

  • 已修复:输出仅包含 test,且可能有 Bash 警告信息,但不会出现 vulnerable。
  • 未修复:输出中包含 vulnerable 字样,说明仍需继续补丁。

注意:Shellshock 包含多个相关 CVE(如 CVE-2014-6271、CVE-2014-7169 等),一次升级可能只修复部分问题,建议多次确认或查阅发行版安全公告。

常见坑与排查

  • 多次补丁:早期补丁并不完整,可能需多次更新才能覆盖所有相关漏洞编号。
  • 容器环境:Docker 容器内的基础镜像可能仍保留旧版本 Bash,需单独重建或更新镜像。
  • 非交互式 Shell:某些脚本通过非交互式方式调用 Bash,仍需确保二进制文件已更新。
  • 手动编译风险:手动编译安装 Bash 可能导致系统自带工具链依赖混乱,优先使用系统包管理器。

参考来源

  • CVE Details: CVE-2014-6271 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6271
  • Red Hat Security Response: Shellshock - https://www.redhat.com/security/vulnerabilities/bash.html
  • GNU Bash Official: https://www.gnu.org/software/bash/