影响范围 PHP、Go、Python等开启CGI(Client)模式的脚本语言 Language 环境依赖 HTTP Client
PHP php-fpmmod_php Guzzle 4+Artax
Python wsgiref.handlers.CGIHandlertwisted.web.twcgi.CGIScript requests
Go net/http/cgi net/http 漏洞原理在CGI(RFC 3875)的模式的时候,server 会把请求中的 Header, 加上 HTTP_ 前缀, 注册为环境变量,且重名变量会被覆盖污染,若该变量被脚本调用,即可利用,该漏洞在15年前在LWP中已被发现并修复http://www.nntp.perl.org/group/perl.libwww/2001/03/msg2249.html。 如控制 HTTPHOST 进行 URL 跳转,或者直接控制 HTTP_PROXY 让流量到代理服务器中转,将 HTTP 控制进入环境变量进行shellshock攻击等,所以,所有 HTTP_ 开头的环境变量在CGI模式下都是不可信不安全的。
利用条件- 后端信任接收的 Header
- 污染控制的变量被脚本调用
- 开启CGI(Client)模式
- 服务器能对外通信
修复方案最为有效的方式就是在脚本调用变量之前及时阻断或者限制内部调用时的可信变量 Nginx在配置中加入 fastcgi_param HTTP_PROXY "";
|