Gixy 是一个 Nginx 配置文件的分析工具,主要目标是防止由于不当的配置带来的安全问题
Gixy 是进行静态分析,只需要指定配置文件的路径,不需要启动任何环境
配置文件 t.conf 的内容:
server {
listen 80 default;
location ~ /v1/((?<action>[^.]*)\.json)?$ {
add_header X-Action $action;
return 200 "OK";
}
}
使用 gixy 进行分析:
gixy t.conf
结果:
检测到了一个问题,指出问题类型为 http_splitting
,原因是 $action
变量中可以含有回车符
这就是HTTP响应头拆分漏洞,通过CRLFZ注入实现攻击,例如请求为:
/v1/see%20below%0d%0ax-crlf-header:injected.json
这个请求可以匹配上面的 location,响应信息为:
HTTP/1.1 200 OK
Server: nginx/1.11.10
Date: Mon, 13 Mar 2017 21:21:29 GMT
Content-Type: application/octet-stream
Content-Length: 2
Connection: close
X-Action: see below
x-crlf-header:injected
可以看到,成功的在最后一行添加了一个响应头 x-crlf-header:injected
因为请求中是包含回车符的,上面的请求 urldecode 后是这样的:
/v1/see below
x-crlf-header:injected.json
这就需要在 location 的匹配时进行严格的验证,改为:
location ~ /v1/((?<action>[^/\s]+)\.json)?$ {
...
}
再次使用 gixy 进行分析后通过了验证
Gixy 可以对配置文件中 include 的其他文件也一起进行分析,例如主配置文件 nginx.conf
引入了其他的配置:
include servers/*;
使用 gixy 分析 nginx.conf 时会自动把 servers
下的配置文件一起检查了,非常方便
(1)ssrf 服务端请求伪造
(2)HTTP Splitting 响应拆分
(3)错误的 referrer/origin 验证
(4)错误使用 add_header 指令
(5)Host 头信息伪造
(6)Referer 验证中允许为空
(7)响应头中使用多行形式
Gixy 发布在 PyPI 上,安装非常简单:
pip install gixy
安装后就可以执行 gixy 命令
Gixy 简单实用,我对安全方面了解不多,用 gixy 检查一遍会感觉踏实很多,建议使用 Nginx 的朋友都试一下
Gixy 发布时间不长,但已经有了4千多个星,项目地址:
https://github.com/yandex/gixy