GitLab CVE-2021-22205漏洞修
在 GitLab CE/EE 中发现了一个影响从 11.9 开始的所有版本的问题。GitLab 没有正确验证传递给文件解析器的图像文件,这导致远程命令执行。
经查询发现GitLab 远程命令执行漏洞(CVE-2021-22205)的利用程序,且发现由于GitLab存在未授权的端点,导致该漏洞在无需进行身份验证的情况下即可进行利用,社区版(CE)和企业版(EE)皆受影响。4月15日,GitLab官方发布安全更新修复了此GitLab命令执行漏洞(CVE-2021-22205),由于GitLab中的ExifTool没有对传入的图像文件的扩展名进行正确处理,攻击者通过上传特制的恶意图片,可以在目标服务器上执行任意命令。CVSS评分为9.9,目前已发现在野利用,请相关用户尽快采取措施进行防护。
GitLab 是由GitLab Inc.开发的一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,可通过Web界面访问公开或私人项目。
受影响版本
- 11.9 <= Gitlab CE/EE < 13.8.8
- 13.9 <= Gitlab CE/EE < 13.9.6
- 13.10 <= Gitlab CE/EE < 13.10.3
漏洞检测
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
环境运行版本为GitLab-ce-12.6.1
[root@QDICSAIPA-P01 ~]# docker exec -it 4a141f6c8436 bash
root@4a141f6c8436:/# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
12.6.1
漏洞防护
- 目前官方已发布新版本修复了该漏洞,请受影响的用户尽快升级至最新版本进行防护,官方下载链接:https://about.gitlab.com/update/
临时防护措施
- 若相关用户暂时无法进行升级操作,可使用白名单限制对Web端口的访问。
跨版本升级风险
如果直接从gitLab-ce:12.6.1-ce.0 ——》gitlab-ce:14.2.6-ce.0 版本中间会导致
- gitlab版本兼容性问题
- * gitlab.rb* 配置自动生成错误
- 环境变量配置项异常
- GitLab CI Shell 模式停止工作
- 回滚失败,Gitlab数据丢失
- gitlab数据库版本兼容问题
根据官网给出升级路线
12.9.5
-> 12.1.17
-> 12.10.14
-> 13.0.14
-> 13.1.11
-> 13.8.8
-> latest 13.12.Z
-> latest 14.0.Z
-> latest 14.Y.Z
- 小版本升级每次升级完一个版本,可以登录进行验证
】
12.9.5--12.9.10-ce.0-----12.10.14-ce.0------13.0.14-ce.0-----13.1.11-ce.0--13.8.8-ce.0------13.2.10-ce.0----13.8.8--13.12.10-----13.12.12--14.0.11------14.1.6
GitLab升级流程
升级准备工作:
-
现有版本:gitLab-ce:12.6.1-ce.0
-
最新版本:gitlab-ce:14.2.6-ce.0
-
GitLab CI Shell 模式停止工作
-
数据备份
-
配置备份
-
拉取gitlab-ce:12.x.x-ce.0镜像
-
停止服务,进行小版本升级
-
确认升级成功,进行测试确认
准备升级镜像:
停止gitlab,unicorn、puma、sidekiq,停掉连接数据库的进程
备份docker容器配置文件
gitlab.rb
gitlab.yml
备份数据库,拷贝到书主机。
root密码破解
su - git
gitlab-rails console
user = User.where(id:1).first
user.password="Extremevision2021"
user.save!
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.example.com'
ports:
- '80:80'
- '443:443'
- '22:22'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
备份
-
首先连接上docker beginor/gitlab-ce:xxx-ce.0的容器
docker exec -i -t gitlab /bin/bash # 停止数据连接服务 gitlab-ctl stop unicorn gitlab-ctl stop puma gitlab-ctl stop sidekiq # 备份数据 gitlab-rake gitlab:backup:create /var/opt/gitlab/backups/ #恢复数据库 gitlab-backup create BACKUP=dump GZIP_RSYNCABLE=yes gitlab-rake gitlab:backup:restore BACKUP=xxxxx gitlab-ctl restart # 刷新配置 gitlab-ctl reconfigure
-
在新的服务器上启动 Docker 后,将备份的
tar
文件拷贝到/home/gitlab/data/backups
目录下,并将文件权限设置为777
在gitlab正常运行的情况下,输入命令 gitlab-rake gitlab:backup:create
备份gitlab,完成后生成在 /usr/local/docker/gitlab/backups/文件夹(即gitlab数据卷目录)下
完成备份后,需要将文件复制出来留作备份。
本文来自博客园,作者:LYChuad,转载请注明原文链接:https://www.cnblogs.com/lychuad/articles/15844136.html