最近,BASH爆出來一個遠程代碼執(zhí)行的漏洞CVE-2014-6271。
BASH除了可以將shell變量導出為環(huán)境變量,還可以將shell函數(shù)導出為環(huán)境變量!當前版本的bash通過以函數(shù)名作為環(huán)境變量名,以“(){”開頭的字串作為環(huán)境變量的值來將函數(shù)定義導出為環(huán)境變量。
此次爆出的漏洞在于BASH處理這樣的“函數(shù)環(huán)境變量”的時候,并沒有以函數(shù)結(jié)尾“}”為結(jié)束,而是一直執(zhí)行其后的shell命令!例如
目前,接受HTTP命令的CGI Shell腳本是最主要的被攻擊對象。一個常見的HTTP請求是這樣:
GET /path?query-param-name=query-param-value HTTP/1.1
Host: www.example.com
Custom: custom-header-value
CGI標準將http請求的所有部分都映射到了環(huán)境變量。例如對于Apache的Httpd,字串(){可以出現(xiàn)在以下這些地方:
* Host (“www.example.com”, as REMOTE_HOST)
* Header value (“custom-header-value”, as HTTP_CUSTOM in this example)
* Server protocol (“HTTP/1.1”, as SERVER_PROTOCOL)
通過自定義這些參數(shù)的值為“函數(shù)環(huán)境變量”的形式,就可以遠程執(zhí)行命令!!!例如:
curl -H User-Agent: () { :;}; echo fuck you! http://xxxxx/victim.sh
此外,OpenSSH也因其AcceptEnv、TERM、SSH_ORIGINAL_COMMAND等環(huán)境變量受此漏洞影響。目前還有更多的受影響程序和利用方式正在不斷地被發(fā)掘出來!