请注意,本文编写于 1344 天前,最后修改于 8 天前,其中某些信息可能已经过时。
Bash 环境变量存在任意代码执行漏洞:
通过 CGI 请求方式可以导致远程代码执行,进而导致服务器被入侵,危害严重,且官方公布补丁曾被绕过。
漏洞影响
1)Bash 受影响版本:
3.0 ~ 4.3小于 3.0 的 Bash 版本也可能受影响。
2)入侵方式:
结合 CGI 方式 可以导致远程代码执行,从而入侵服务器。
查看系统 Bash 版本
bash --version示例输出:
[root@test test]# bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.Linux Bash 严重漏洞修复通知
(2014 年 9 月 25 日更新)
Linux 官方内置 Bash 被发现存在严重安全漏洞,攻击者可以利用该漏洞完全控制目标系统并发起攻击。
为了避免服务器受到攻击,建议尽快完成漏洞修补。
漏洞检测方法
可以使用以下命令检测系统是否存在漏洞:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"如果系统存在漏洞,可能输出如下内容:
vulnerable
this is a test如果第一行出现 vulnerable,说明系统存在 Bash 任意命令执行漏洞。
漏洞原理分析
该脚本的关键点:
env x='() { :;}; echo vulnerable'env 命令用于创建环境变量:
x='() { :;}; echo vulnerable'然后执行:
bash -c "echo this is a test"正常情况下:
() { :;};只是一个函数定义。
但由于 Bash 在处理函数定义的环境变量时存在设计缺陷:
函数定义后面的内容:
echo vulnerable被当作 命令执行。
因此:
[函数定义] + [任意命令]后面的 任意命令会被执行。
需要注意的是:
漏洞并不依赖 env 命令,只要满足条件即可触发。
漏洞触发条件
只要程序满足以下两个条件,就可能被利用:
1)程序使用 Bash 作为脚本解释器
2)环境变量的值 可以由用户输入控制
典型场景:
- CGI
- Web 服务
- SSH 环境变量
- DHCP 客户端
升级 Bash 修复漏洞
Bash 下载地址:
http://ftp.gnu.org/gnu/bash/编译安装 Bash
wget http://ftp.gnu.org/gnu/bash/bash-5.1.tar.gz
tar zxvf bash-5.1.tar.gz
cd bash-5.1
./configure
make
make install升级后验证
bash --version建议升级到:
Bash 5.x升级完成后再次执行漏洞检测命令确认漏洞已修复。
のBlog