这篇文章主要介绍了Gitlab中任意文件读取漏洞的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Port : 80
GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。近日研究者发现在其多个版本中存在文件读取漏洞 (CVE-2016-9086) 和 任意用户 authentication_token 泄漏漏洞,攻击者可以通过这两个漏洞来获取管理员的权限,进而控制所有 gitlab 项目。影响版本:任意文件读取漏洞 (CVE-2016-9086):GitLab CE/EEversions 8.9, 8.10, 8.11, 8.12, and 8.13任意用户 authentication_token 泄露漏洞:Gitlab CE/EE versions 8.10.3-8.10.5本文在前辈研究基础上只分析任意斍读取漏洞。从 8.9.0 版本开始,GitLab 新增了导入导出项目的功能。一个空的 gitlab 项目导出后结构如下:当我们导入 GitLab 的导出文件的时候,GitLab 会按照如下步骤处理:服务器根据 VERSION 文件内容检测导出文件版本,如果版本符合,则导入。服务器根据 Project.json 文件创建一个新的项目,并将对应的项目文件拷贝到服务器上对应的位置。检测 VERSION 文件的代码位于:/lib/gitlab/import_export/version_checker.rb
中:我们可以看到这里的逻辑是读取 VERSION 文件的第一行赋值给变量 version,然后检测 verison 与当前版本是否相同,相同返回 true,不相同则返回错误信息 (错误信息中包括变量 version 的值). 于是漏洞发现者 Jobert Abma 巧妙的使用了软链接来达到读取任意文件的目的。首先,我们给 VERSION 文件加上软链接并重新打包。这样,读取 VERSION 文件的时候服务器就会根据软链接读取到 /etc/passwd 的第一行内容并赋值给 version。但是由于 version 与当前版本不相同,所以会输出 version 的值,也就是 /etc/passwd 第一行的内容。但是,如果只读取任意文件的第一行,能做的事情还是太少了。漏洞发现者显然不满足这一结果,他继续找了下去.读取 Project.json 这一配置文件的代码位于:/lib/gitlab/import_export/project_tree_restorer.rb 中:在这里,我们可以再次使用软链接使变量 json 获取到任意文件的内容,但是由于获取的文件不是 json 格式,无法 decode,导致异常抛出,最终在前端显示出任意文件的内容。 添加软链接并打包:如下测试环境借助 vulhub 的 docker 镜像,附上 P 师傅的链接:https://github.com/vulhub/vulhub
编译及运行环境:请使用 2G 及以上内存的 VPS 或虚拟机运行该环境,实测 1G 内存的机器无法正常运行 Gitlab(运行后 502 错误)。环境运行后,Web 端口为 10080,ssh 端口为 10022。访问 http://your-ip:10080
,设置管理员(用户名 root
)密码,登录。新建一个项目,点击 GitLab export
:将 test.tar.gz上传,将会读取到 /etc/passwd
文件内容:漏洞修复官方先移除了导入包里的软连接,其次,读取 VERSION 的内容和 project.json 的内容出错后将内容输出到日志里而非返回到前端。感谢你能够认真阅读完这篇文章,希望小编分享的“Gitlab中任意文件读取漏洞的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持云编程开发博客,关注云编程开发博客免费云主机域名行业资讯频道,更多相关知识等着你来学习!
很多人现在都遇到公司是https类网页无法打开,是由于微软KB2661254这个补丁把网页加密等级最低要求是:1024位。而之前很多网页服务器加密是512位,大部人处理此方法是把KB2661354这个补丁卸载。但是由于现在很多用户使用360安全卫士或QQ管家,…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。