GitLab CVE-2021-22205漏洞修

image-20211029154630264

在 GitLab CE/EE 中发现了一个影响从 11.9 开始的所有版本的问题。GitLab 没有正确验证传递给文件解析器的图像文件,这导致远程命令执行。

image-20211029155123002

​ 经查询发现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数据库版本兼容问题

根据官网给出升级路线

image-20211029161622460

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镜像

  • 停止服务,进行小版本升级

  • 确认升级成功,进行测试确认

准备升级镜像:

image-20211103120345325

停止gitlab,unicorn、puma、sidekiq,停掉连接数据库的进程

备份docker容器配置文件

gitlab.rb

gitlab.yml 

image-20211103120452621

备份数据库,拷贝到书主机。

image-20211103120824365

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'

备份

  1. 首先连接上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
    
  2. 在新的服务器上启动 Docker 后,将备份的 tar 文件拷贝到 /home/gitlab/data/backups 目录下,并将文件权限设置为 777

在gitlab正常运行的情况下,输入命令 gitlab-rake gitlab:backup:create 备份gitlab,完成后生成在 /usr/local/docker/gitlab/backups/文件夹(即gitlab数据卷目录)下

完成备份后,需要将文件复制出来留作备份。

image-20211103190808583

posted @ 2022-01-25 18:12  LYChuad  阅读(473)  评论(0)    收藏  举报