起因
最近一台服务器出现服务器资源 cpu、内存过高的情况,通过对进程的分析,发现是 gitlab 容器进程,怀疑是 gitlab 被入侵运行了挖矿病毒,通过对 gitlab 日志的分析,可以得出入侵者是利用了 gitlab 的 CVE-2021-22205 的漏洞,对 gitlab 进行了攻击。
CVE-2021-22205 介绍
CVE-2021-22205 是一个严重的严重性漏洞 (CVSS 10.0),它是由第三方文件解析器 Exif-Tool 对图像文件进行不当验证的结果,导致远程命令执行漏洞,可能导致您的 GitLab 实例被攻击。
以下版本受到漏洞影响:
- 11.9.x - 13.8.7
- 13.9.0 - 13.9.5
- 13.10.0 - 13.10.2
解决
gitlab 发布了 GitLab 13.10.3、13.9.6 和 13.8.8 版本来解决这个漏洞。请尽快升级。
如果无法即使更新和使用热更新补丁解决,可以通过将 exiftool 脚本替换为 cat -。这个解决方案将防止从上传的图像中剥离所有的 exif 数据。
将 /opt/gitlab/embedded/bin/exiftool 脚本内容替换为
#!/bin/bash
cat -
这种方法不是长久之计,每次重启容器时都要手动修改文件,还是尽快更新版本。
原因
根据 gitlab 的官方漏洞 issues 来看,当访问接口/uploads/user 上传图像文件时,GitLab Workhorse 会将扩展名为 jpg、jpeg、tiff 文件传递给 ExifTool。用于删除其中不合法的标签。具体的标签在 workhorse/internal/upload/exif/exif.go 中的 startProcessing 方法中有定义,为白名单处理。
而 ExifTool 在解析文件的时候会忽略文件的扩展名,尝试根据文件的内容来确定文件类型,其中支持的类型有 DjVu。
关键在于 ExifTool 在解析 DjVu 注释的 ParseAnt 函数中存在漏洞,所以我们就可以通过构造 DjVu 文件并插入恶意注释内容将其改为 jpg 后缀上传,因为 gitlab 并未在这个过程中验证文件内容是否是允许的格式,最后让 ExifTool 以 DjVu 形式来解析文件,造成了 ExifTool 代码执行漏洞。
该漏洞存在于 ExifTool 的 7.44 版本以上,在 12.4 版本中修复。Gitlab v13.10.2 使用的 ExifTool 版本为 11.70。并且接口/uploads/user 可通过获取的 X-CSRF-Token 和未登录 Session 后来进行未授权访问。最终造成了 GitLab 未授权的远程代码执行漏洞。
其它
gitlab 提供了对 gitlab 安全的一些最佳实践:https://about.gitlab.com/blog/2020/05/20/gitlab-instance-security-best-practices/
参考
- https://hackerone.com/reports/1154542
- https://www.anquanke.com/post/id/266606
- https://mp.weixin.qq.com/s?__biz=Mzg3MDAzMDQxNw==&mid=2247491418&idx=1&sn=853be1256de894c3c579a07738c11590
- https://about.gitlab.com/blog/2021/11/04/action-needed-in-response-to-cve2021-22205/
- https://forum.gitlab.com/t/cve-2021-22205-how-to-determine-if-a-self-managed-instance-has-been-impacted/60918?_gl=11y48o1u_gaODE5OTE4NTMuMTY2MjgxODQ3OQ.._ga_ENFH3X7M5Y*MTY2MjgxODQ5MC4xLjAuMTY2MjgxOTE4Ny4wLjAuMA..
- https://forum.gitlab.com/t/cve-2021-22205-how-to-determine-if-a-self-managed-instance-has-been-impacted/60918/2?_gl=11y48o1u_gaODE5OTE4NTMuMTY2MjgxODQ3OQ.._ga_ENFH3X7M5Y*MTY2MjgxODQ5MC4xLjAuMTY2MjgxOTE4Ny4wLjAuMA..
- https://about.gitlab.com/releases/2021/04/14/security-release-gitlab-13-10-3-released/
- https://hackerone.com/vakzz?type=user
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-22205