99久久国产综合精品国_亚洲av日韩aⅴ电影_午夜福利在线电影_亚洲aⅤ色欲久久一区二区三区_91九色蝌蚪国产精品_亚洲av无码乱码在线观看四虎_4国产精品无码制服丝袜_亚洲Av成人五月天在线观看_牛牛成人永久免费视频_午夜福利在线资源


【漏洞預(yù)警】GitLab曝高危漏洞,可致private token等敏感信息泄露

GitLab于昨日發(fā)布了8.17.4、8.16.8和8.15.8版本(社區(qū)版和企業(yè)版),修復(fù)多個(gè)高危漏洞,包含一個(gè)針對(duì)關(guān)鍵信息泄露漏洞的更新補(bǔ)丁,針對(duì)SSRF攻擊的防護(hù),以及針對(duì)可導(dǎo)致Atom源中私有郵件地址泄露漏洞的補(bǔ)丁,ElasticSearch中私有庫(kù)數(shù)據(jù)泄露的補(bǔ)丁等。

GitLab特別在其更新日志中提到,在內(nèi)部代碼審核過程中,在GitLab Issue和Merge Request tracker中發(fā)現(xiàn)一個(gè)Critical級(jí)別的高危漏洞,并因此強(qiáng)烈建議受影響用戶盡快升級(jí)。

漏洞編號(hào)

CVE-2017-0882

漏洞介紹

漏洞可導(dǎo)致?lián)碛邢蚱渌脩舭l(fā)送issue或merge請(qǐng)求權(quán)限的攻擊者獲取到該用戶的private token, email token, email地址和加密的OTP secret。想要利用漏洞需要有Reporter級(jí)別的權(quán)限。通過Gitlab API和這些敏感信息,就能以該用戶權(quán)限進(jìn)行操作,如果目標(biāo)用戶是管理員則可能產(chǎn)生更大危害。

造成漏洞的原因是對(duì)用戶對(duì)象序列化過程中的一個(gè)bug,這個(gè)問題自GitLab 8.7.0版本就開始出現(xiàn)。

影響版本

8.7.0至8.15.7

8.16.0至8.16.7

8.17.0至8.17.3

升級(jí)后注意事項(xiàng)

由于漏洞的性質(zhì),用戶的token可能會(huì)緩存在代理或?yàn)g覽器中。因此建議站長(zhǎng)們重置所有用戶的private token和email token。

一次性密碼(OTP)的secret也有可能因漏洞而泄露。這些secret都經(jīng)過加密,需要密鑰才能解密,并且不能在沒有用戶密碼的情況下使用。盡管如此, 還是建議先將一次性密碼功能關(guān)閉然后再重新打開,從而重置OTP secret。

重置用戶Tokens步驟

使用Omnibus的用戶將下面的源碼保存到: /opt/gitlab/embedded/service/gitlab-rails/lib/tasks/reset_token.rake

使用源碼安裝的用戶保存到: <gitlab_installation_dir>/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 < ActiveRecord::Base
? 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用戶運(yùn)行

sudo gitlab-rake tokens:reset_all
sudo gitlab-rake tokens:reset_all_email

源碼用戶運(yùn)行

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 

執(zhí)行完所有操作后可以把rake文件刪除。

臨時(shí)補(bǔ)丁

對(duì)于某些無法升級(jí)的用戶可以使用以下的補(bǔ)?。?/p>

Omnibus用戶:

$ cd /opt/gitlab/embedded/service/gitlab-rails/
$ git apply <path_to_diff>
$ sudo gitlab-ctl restart unicorn

源碼用戶:

$ cd <gitlab_installation_dir/
$ git apply <path_to_diff>
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 < Projects::ApplicationController
       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 < Projects::ApplicationController
       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

檢驗(yàn)漏洞是否修復(fù)

打開項(xiàng)目;

打開項(xiàng)目的issue跟蹤器;

創(chuàng)建一個(gè)issue,將issue擁有權(quán)限分配給另一個(gè)用戶;

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

來源:FreeBuf.COM

原文地址:http://www.freebuf.com/vuls/129906.html

上一篇
下一篇

聯(lián)系我們:cert@chaosec.com