bash漏洞技术层面分析
漏洞起源:
漏洞信息最早来源于国外知名漏洞网站exploit-db下的第34765篇漏洞报告,其中出现了一条验证命令:
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
如果在一个含有版本号小于bash 4.3的linux或者unix系统上执行以上命令,可能会得到以下输出:
vulnerable
this is a test
其中如果出现第一行vulnerable则说明该系统存在一个由bash程序缺陷导致的任意命令执行漏洞。
漏洞原理及分析:
该脚本的出现引起了我技术人员的关注,其中env为一个系统命令,该命令让系统创建一个环境变量x='() { :;}; echo vulnerable'并且带着这个环境变量的值执行bash -c “echo this is a test”。第一行输出的”vulnerable”暴露了漏洞的存在,因为函数定义’() { :;};’之后的’echo vulnerable’指令本不该被执行却被执行。对bash详细分析后得知bash在处理含有函数定义诸如”() { :;};”的环境变量赋值的代码上存在设计缺陷,错误地将函数定义后面的字符串作为命令执行。
所以真正的利用与env命令无关,只要设法让系统接受一个含有”[函数定义]+[任意命令]”的环境变量赋值则可触发”[任意命令]”部分所表示的代码执行。
漏洞存在条件:
任何已知程序,只要满足以下两个条件就可以被用来通过bash漏洞导致任意命令执行:
1、程序在某一时刻使用bash作为脚