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
、::1
、0.0.0.0
、10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
和 IPv6 站点本地(ffc0::/10
)地址。
要允许访问这些地址:
- 在顶部栏上,选择 主菜单 > 管理员。
- 在左侧边栏中,选择 设置 > 网络。
- 展开 出站请求。
- 选中 允许来自 webhooks 和服务对本地网络的请求 复选框。
阻止系统钩子请求到本地网络
系统钩子默认允许向本地网络发出请求,因为它们是由管理员设置的。要阻止系统钩子请求到本地网络:
- 在顶部栏上,选择 主菜单 > 管理员。
- 在左侧边栏中,选择 设置 > 网络。
- 展开 出站请求。
- 清除 允许系统钩子向本地网络发送请求 复选框。
为本地请求创建许可名单
即使本地请求被禁止,您也可以允许系统钩子和 Web 钩子访问某些域名和 IP 地址。要将这些域名添加到白名单:
- 在顶部栏上,选择 主菜单 > 管理员。
- 在左侧边栏中,选择 设置 > 网络。
- 展开 出站请求 并添加条目。
条目可以:
- 用分号、逗号或空格(包括换行符)分隔。
- 采用不同的格式,如主机名、IP 地址、IP 地址范围。支持 IPv6。包含 Unicode 字符的主机名应使用 Internationalized Domain Names in Applications (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