CVE-2021-22205:Gitlab Exiftool RCE分析之二:从认证后RCE到未授权RCE之旅

VSole2021-10-29 22:39:41

认证后命令执行

Gitlab本身包含图片上传功能,所以按照上文构造思路,很容易实现RCE。

首先修改djvu命令为curl指令,生成文件后修改为图片后缀名。

使用用户登录Gitlab,新建一个工程。

然后建一个issue,点击`attach a new file`导入图片,命令随即被执行。

新建issue和工程需要用户权限,存在一定的限制。

认证绕过探索

通常来讲,像Gitlab这样通用的框架图片上传解析应该都是需要认证的,但是经过深入分析,发现了无需认证的接口。由于信息并没有公开,这里尝试利用自己的思路寻找一种无需认证图片上传的办法,复盘整个漏洞分析过程。

查阅Gitlab官方文档:

user_file_uploads.html
https://docs.gitlab.com/ee/security/user_file_uploads.html

在`Administrator users/User file uploads`中说明了用户文件上传的规则,其中`Non-image attachments do require authentication to be viewed`这句话显得很突出。大体来说就是Gitlab为了支持电子邮件正文中图片的处理,设计上认为图片上传无需用户认证。

从Gitlab官网下载v13.10.2-ce版本源码,全文搜索`upload`和`user`字段,找到了`/uploads/user`接口:

全文搜索`/uploads/user`,在routes.go中找到路由映射:

按照`snippetUploadPattern`往后跟并没有找到引用链,而`/uploads/user`接口处理代码位于`uploads_controller`中。

测试`/uploads/user/`GET请求返回404,但POST请求返回422错误:

使用`gitlab-ctl tail`命令查看日志,显示`InvalidAuthenticityToken`。

搜索代码,请求必须必须加上`HTTP_X_CSRF_TOKEN`。

添加X-CSRF-TOKEN后显示404:

尝试向该接口发送图片文件,然后抓包修改报文,将登录用户的Cookie和XSRF-TOKEN设置好,诡异得返回了`Faild to Process image`,说明图片已经被处理,而且不验证传输文件的变量名:

以上步骤还是需要用户认证的,那么怎样不需要认证呢。查看登录页面`/users/sign_in`,同样返回了Cookie信息,且页面中包含csrf-token:

使用登录页面返回的Cookie值和csrf-token值,成功实现RCE。

至此未授权图片解析复现成功,进而实现RCE,这里就不进行代码分析了,有兴趣的小伙伴可以自行下载源代码调试学习。

漏洞修复

主要修补了exif图片处理模块。

修补后,请求返回404。

最后记得升级GitLab到最新版本。

gitlab
本作品采用《CC 协议》,转载必须注明作者和本文链接
GitLab本周四紧急发布安全补丁,修复一个可让攻击者以其他用户身份运行管道的严重漏洞。
Gitlab是目前被广泛使用的基于git的开源代码管理平台, 基于Ruby on Rails构建, 主要针对软件开发过程中产生的代码和文档进行管理,同时可以搭建Web服务。
CVSS v3.1 分数:10.0
对此,安识科技建议广大用户及时升级到安全版本,并做好资产自查以及预防工作,以免遭受黑客攻击。GitLab 主要对 group 和 project 两个维度进行代码和文档管理。漏洞危害 攻击者可利用该漏洞通过 GitHub API 构造恶意数据执行远程代码攻击,最终获取服务器最高权限。解决方案 当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。
GitLab 禁用 Windows!
2022-08-14 17:42:07
作为 GitHub 的重要竞争对手,GitLab 自成立以来就一直与其在源码库市场上进行争夺。出于对安全性的考虑,GitLab 认为务必要对员工电脑配置进行统一调整。与之相比,“macOS 和 Linux 则具有确保平台安全稳定的能力”,满足了 GitLab 的基本需求。
Gitlab 被发现有一项禁止使用 Microsoft Windows 的公司政策。微软旗下的 GitHub 是 Gitlab 最主要的竞争对手。
GitLab 通过安全更新修复了帐户接管高危漏洞 据Bleeping Computer网站6月3日消息,GitLab 为其社区版和企业版产品的多个版本发布了关键安全更新,以解决8个漏洞问题,其中一个为账户接管的高危漏洞。
GitLab是一个基于Web的Git存储库,适用于需要远程管理其代码的开发人员团队。它拥有大约3000万注册用户和100万付费客户。
GitLab的安装和使用
2022-05-08 07:13:44
近期目标是整明白用GitLab玩儿CI/CD,本周先从安装和使用开始, 安装非常简单,ubuntu20.04, curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash, sudo apt install gitlab-ce,
GitLab 修复了一个高危漏洞,该漏洞影响 GitLab Community Edition (CE) 和 Enterprise Edition (EE),允许远程攻击者使用硬编码密码控制用户账号。硬编码密码 123qweQWE!@#000000000 是意外加入到代码中,GitLab 督促用户立即升级到最新的 14.9.2、14.8.5 或 14.7.7 版本以防止潜在的攻击。它还重置了部分用
VSole
网络安全专家