freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

天翼云安全实验室 | CVE-2022-1162 Gitlab硬编码密码漏洞研究复现
Bl4ck_Ho1e 2022-04-13 16:55:40 289881
所属地 浙江省

漏洞原理

在Gitlab的某些版本中存在着通过硬编码的方式为Oauth登录的用户设置默认密码的漏洞。具体来说,如果自行搭建的Gitlab开启了Oauth登录如Github登录、Google登录等,Gitlab在为这些第三方登录的用户创建账户时,会使用硬编码的方式设置用户密码,导致这些用户的密码都一样,这样子就很危险啊。
通过修复commit可以看到,关于Gitlab上硬编码这一段漏洞源码大概是这样子:
硬编码生成默认密码
为Oauth登录用户生成默认密码
所以攻击者可以通过形似123qweQWE!@#0000的密码尝试登录Gitlab用户的帐号,默认密码的长度是21,因此也就是字符串123qweQWE!@#000000000。当然目前该漏洞已经得到了修复了,但受影响的漏洞版本却不会被历史遗忘,包括Gitlab-CE和Gitlab-CC的以下版本:

  • 14.7至14.7.6

  • 14.8至14.8.4

  • 14.9至14.9.1

环境搭建

环境分为两部分,首先是受影响范围内的Gitlab,其次需要构建用于Oauth的第三方登录。

搭建Gitlab

本文使用受影响的Gitlab-CE版本14.7.0,直接写个docker-compose.yml启动:

version: '3'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:14.7.4-ce.0'
    container_name: 'gitlab'
    restart: always
    privileged: true
    hostname: 'gitlab'
    environment:
      TZ: 'Asia/Shanghai'
    ports:
      - '8080:80'
    volumes:
      - ./config:/etc/gitlab
      - ./data:/var/opt/gitlab
      - ./logs:/var/log/gitlab

创建好用于映射的3个目录,然后直接docker-compose up -d启动。

Github App

Oauth第三方登录使用Github App,最主要的信息是callback URL,为github地址加上/users/auth/github/callback,github使用本地地址没有问题,我们只是改了下本地hosts给它个域名比较好看。
注册Github App
注册完成App之后就得到了IDsecrets

配置Gitlab

修改Gitlab的配置文件github.rb以开启使用github作为第三方Oauth登录。

### OmniAuth Settings
###! Docs: https://docs.gitlab.com/ee/integration/omniauth.html
gitlab_rails['omniauth_enabled'] = true   # 开启功能
gitlab_rails['omniauth_allow_single_sign_on'] = ['github']   # 使用github登录
gitlab_rails['omniauth_block_auto_created_users'] = false   # 自动创建用户帐号
gitlab_rails['omniauth_auto_link_user'] = ['github']   # 链接github用户信息
gitlab_rails['omniauth_providers'] = [   # 设置github第三方登录信息
  {"name" => "github",
   "app_id" => "APP_ID",
   "app_secret" => "APP_SECRET",
   "args" => {
     "scope" => "user:email"
   }
  }
]

然后重启docker镜像以开启配置。

docker restart xxxx

漏洞验证

打开Gitlab就可以选择Github登录了,点击后跳转Github登录,登录回来后就新增了和Github用户同名的用户。
通过Github第三方登录Gitlab
完后退出登录,再使用该用户名与密码123qweQWE!@#000000000登录成功。
使用硬编码默认密码登录用户

漏洞修复建议

由于官方已经对漏洞进行了修复,所以升级Gitlab到安全的版本肯定是最佳选择。
其次对于可能已经存在该弱密码的用户,则需要提醒修改密码,但用户并不知道自己的密码是不是弱密码,所以最好提醒自己的Gitlab用户更新一次登录密码

参考

# web安全 # 漏洞分析 # Gitlab
本文为 Bl4ck_Ho1e 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Bl4ck_Ho1e LV.4
这家伙太懒了,还未填写个人描述!
  • 10 文章数
  • 12 关注者
基于Casbin的ABAC授权模型设计与开发踩坑实录
2022-11-25
企业内部钓鱼邮件演练指南
2022-10-13
当我们谈论小程序安全时,我们在谈论什么
2022-10-13
文章目录