记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

GitLab曝高危漏洞,可致private token等敏感信息泄露

2017-03-22 11:50

GitLab曝高危漏洞,可致private token等敏感信息泄露。GitLab于昨日发布了8.17.4、8.16.8和8.15.8版本(社区版和企业版),修复多个高危漏洞,包含一个针对关键信息泄露漏洞的更新补丁,针对SSRF攻击的防护,以及针对可导致Atom源中私有邮件地址泄露漏洞的补丁,ElasticSearch中私有库数据泄露的补丁等。

GitLab特别在其更新日志中提到,在内部代码审核过程中,在GitLab Issue和Merge Request tracker中发现一个Critical级别的高危漏洞,并因此强烈建议受影响用户尽快升级。

\

漏洞编号

CVE-2017-0882

漏洞介绍

漏洞可导致拥有向其他用户发送issue或merge请求权限的攻击者获取到该用户的private token, email token, email地址和加密的OTP secret。想要利用漏洞需要有Reporter级别的权限。通过Gitlab API和这些敏感信息,就能以该用户权限进行操作,如果目标用户是管理员则可能产生更大危害。

造成漏洞的原因是对用户对象序列化过程中的一个bug,这个问题自GitLab 8.7.0版本就开始出现。

影响版本

8.7.0至8.15.7

8.16.0至8.16.7

8.17.0至8.17.3

升级后注意事项

由于漏洞的性质,用户的token可能会缓存在代理或浏览器中。因此建议站长们重置所有用户的private token和email token。

一次性密码(OTP)的secret也有可能因漏洞而泄露。这些secret都经过加密,需要密钥才能解密,并且不能在没有用户密码的情况下使用。尽管如此, 还是建议先将一次性密码功能关闭然后再重新打开,从而重置OTP secret。

重置用户Tokens步骤

使用Omnibus的用户将下面的源码保存到: /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/reset_token.rake

使用源码安装的用户保存到: /lib/tasks/reset_token.rake

# lib/tasks/reset_token.rake

require_relative '../../app/models/concerns/token_authenticatable.rb'

STDOUT.sync = true

namespace :tokens do

desc "Reset all GitLab user auth tokens"

task reset_all: :environment do

reset_all_users_token(:reset_authentication_token!)

end

desc "Reset all GitLab email tokens"

task reset_all_email: :environment do

reset_all_users_token(:reset_incoming_email_token!)

end

def reset_all_users_token(token)

TmpUser.find_in_batches do |batch|

puts "Processing batch starting with user ID: #{batch.first.id}"

batch.each(&token)

end

end

end

class TmpUser

include TokenAuthenticatable

self.table_name = 'users'

def reset_authentication_token!

write_new_token(:authentication_token)

save!(validate: false)

end

def reset_incoming_email_token!

write_new_token(:incoming_email_token)

save!(validate: false)

end

end

Omnibus用户运行

sudo gitlab-rake tokens:reset_all

sudo gitlab-rake tokens:reset_all_email

源码用户运行

sudo -u git -H bundle exec rake tokens:reset_all RAILS_ENV=production

sudo -u git -H bundle exec rake tokens:reset_all_email RAILS_ENV=production

执行完所有操作后可以把rake文件删除。

临时补丁

对于某些无法升级的用户可以使用以下的补丁:

Omnibus用户:

$ cd /opt/gitlab/embedded/service/gitlab-rails/

$ git apply

$ sudo gitlab-ctl restart unicorn

源码用户:

$ cd

diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb

index 1151555..857d907 100644

--- a/app/controllers/projects/issues_controller.rb

+++ b/app/controllers/projects/issues_controller.rb

@@ -129,7 +129,7 @@ class Projects::IssuesController

end

format.json do

- render json: @issue.to_json(include: { milestone: {}, assignee: { methods: :avatar_url }, labels: { methods: :text_color } }, methods: [:task_status, :task_status_short])

+ render json: @issue.to_json(include: { milestone: {}, assignee: { only: [:name, :username], methods: [:avatar_url] }, labels: { methods: :text_color } }, methods: [:task_status, :task_status_short])

end

end

diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb

index 82f9b6e..677a8a1 100644

--- a/app/controllers/projects/merge_requests_controller.rb

+++ b/app/controllers/projects/merge_requests_controller.rb

@@ -308,7 +308,7 @@ class Projects::MergeRequestsController

end

format.json do

- render json: @merge_request.to_json(include: { milestone: {}, assignee: { methods: :avatar_url }, labels: { methods: :text_color } }, methods: [:task_status, :task_status_short])

+ render json: @merge_request.to_json(include: { milestone: {}, assignee: { only: [:name, :username], methods: [:avatar_url] }, labels: { methods: :text_color } }, methods: [:task_status, :task_status_short])

end

end

rescue ActiveRecord::StaleObjectError

检验漏洞是否修复

打开项目;

打开项目的issue跟踪器;

创建一个issue,将issue拥有权限分配给另一个用户;

查看返回的JSON,检查其中是否有敏感信息。

知识来源: www.2cto.com/article/201703/616081.html

阅读:108053 | 评论:0 | 标签:漏洞

想收藏或者和大家分享这篇好文章→复制链接地址

“GitLab曝高危漏洞,可致private token等敏感信息泄露”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云