环境变量也能变成命令
Shellshock(CVE-2014-6271 系列)利用的是 bash 对环境变量中函数定义的处理方式:攻击者可以把额外命令拼接在函数定义之后,bash 在解析环境变量时会一并执行。凡是能把外部输入转成环境变量再交给 bash 的场景都受影响,其中 CGI 网关类部署风险最高。老设备、老旧镜像与嵌入式系统仍可能带病,因此这条自测值得作为常规巡检项保留。
基本信息
| 适用平台 | Linux 与 macOS(bash 解释器) |
|---|---|
| 受影响组件 | bash(含以 bash 为 sh 的系统与 CGI 场景) |
| 自测方式 | 构造带函数定义的环境变量,观察是否执行额外命令 |
| 基线 | bash 已修复 Shellshock 全系列(含后续变体) |
| 风险等级 | 高 |
典型使用场景
- 资产清点:排查老设备与老镜像中的 bash 版本
- 对外 CGI 与网关系统:风险最高,优先复测
- 容器与嵌入式设备:基础镜像与固件长期未更新
- 合规核查:作为高危历史漏洞的复测证据
- 补丁验证:升级 bash 后用同一方法复测确认已修复
快速自测
快速自测
env x='() { :;}; echo vulnerable' bash -c 'echo test' 2>&1
bash --version | head -1
rpm -q bash 2>/dev/null; dpkg -l bash 2>/dev/null | tail -2
# 输出包含 vulnerable 即存在风险;升级 bash 后复测
ls -l /bin/sh # 若指向 bash,影响面需重新评估
sudo dnf update -y bash 2>/dev/null || sudo apt-get install --only-upgrade -y bash自测结果读法
| 结果 | 含义 | 处置 |
|---|---|---|
| 输出含 vulnerable | 存在 Shellshock 风险 | 立即升级 bash 并复测 |
| 输出仅 test | 当前不受该测试方法影响 | 仍需确认是否含后续变体修复 |
| bash --version 很旧 | 版本长期未更新 | 检查发行版公告与包状态 |
| /bin/sh 指向 bash | 影响面扩大 | 确认脚本环境是否受影响 |
| 系统无 bash | 以其它 shell 提供 | 仍要核查依赖 bash 的脚本 |
CGI 与网关类场景(脚本通过环境变量触达 bash)风险最高:有对外 CGI 的老系统要优先复测,必要时先下线或前置访问控制。
落地要点
- 补丁不完整的系统对后续变体(如 CVE-2014-7169)仍可被利用:要装全系列修复
- 嵌入式设备与老旧镜像的 bash 版本往往很老,清点时应单独列为一类
- 升级 bash 属高风险操作:保留一个可用会话与带外通道
- 复测要使用与初次相同的命令,结果才具备可比性
- 把自测脚本纳入例行巡检,新入网设备统一跑一遍
升级系统 shell 前先确认关键脚本的兼容性:bash 版本跨越较大时,历史脚本的行为可能有细微差异。