Webhook 和不安全的内部 Web 服务

至少具有维护者角色的用户可以设置在项目中发生特定更改时触发的 webhooks。触发时,会向 URL 发送一个 POST HTTP 请求。Webhook 通常配置为将数据发送到特定的外部 Web 服务,该服务以适当的方式处理数据。

但是,可以使用内部 Web 服务而不是外部 Web 服务的 URL 配置 Webhook。 当 webhook 被触发时,运行在极狐GitLab 服务器或其本地网络中的非极狐GitLab Web 服务可能会被利用。

Webhook 请求由极狐GitLab 服务器本身发出,每个钩子使用一个可选的 secret 令牌进行授权,而非:

  • 用户令牌。
  • 特定于仓库的令牌。

因此,这些请求可能具有比预期更广泛的访问权限,包括对托管 Webhook 的服务器上运行的所有内容的访问权限,包括:

  • 极狐GitLab 服务器。
  • API 本身。
  • 对于某些 webhook,网络访问该 webhook 服务器的本地网络中的其他服务器,即使这些服务受到保护并且无法从外部世界访问。

Webhook 可用于使用不需要身份验证的 Web 服务触发破坏性命令。这些 webhook 可以让极狐GitLab 服务器向删除资源的端点发出 POST HTTP 请求。

允许对本地网络的 webhook 和服务请求

为防止利用不安全的内部 Web 服务,不允许对以下本地网络地址的所有 Webhook 请求:

  • 当前极狐GitLab 实例服务器地址。
  • 私网地址,包括 127.0.0.1::10.0.0.010.0.0.0/8172.16.0.0/12192.168.0.0/16和 IPv6 站点本地(ffc0::/10)地址。

要允许访问这些地址:

  1. 在顶部栏上,选择 菜单 > 管理员
  2. 在左侧边栏中,选择 设置 > 网络
  3. 展开 出站请求
  4. 选中 允许来自 web hooks 和服务对本地网络的请求 复选框。

防止系统钩子请求到本地网络

系统钩子默认允许向本地网络发出请求,因为它们是由管理员设置的。要防止系统钩子请求到本地网络:

  1. 在顶部栏上,选择 菜单 > 管理员
  2. 在左侧边栏中,选择 设置 > 网络
  3. 展开 出站请求
  4. 清除 允许系统钩子向本地网络发送请求 复选框。

为本地请求创建许可名单

您可以允许系统钩子和网络钩子访问某些域名和 IP 地址,即使本地请求被禁止。要将这些域名添加到白名单:

  1. 在顶部栏上,选择 菜单 > 管理员
  2. 在左侧边栏中,选择 设置 > 网络
  3. 展开 出站请求 并添加条目。

条目可以:

  • 用分号、逗号或空格(包括换行符)分隔。
  • 采用不同的格式,如主机名、IP 地址、IP 地址范围。支持 IPv6。包含 Unicode 字符的主机名应使用应用程序中的国际化域名 (IDNA) 编码。
  • 包括端口。例如,127.0.0.1:8080 只允许连接到 127.0.0.1 上的 8080 端口。如果未指定端口,则允许该 IP 地址或域上的所有端口。IP 地址范围允许该范围内所有 IP 地址上的所有端口。
  • 编号不超过 1000 个条目,每个条目不超过 255 个字符。
  • 不包含通配符(例如,*.example.com)。

例如:

example.com;gitlab.example.com
127.0.0.1,1:0:0:0:0:0:0:1
127.0.0.0/8 1:0:0:0:0:0:0:0/124
[1:0:0:0:0:0:0:1]:8080
127.0.0.1:8080
example.com:8080