538.md 4.3 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
# Webhooks and insecure internal web services

> 原文:[https://docs.gitlab.com/ee/security/webhooks.html](https://docs.gitlab.com/ee/security/webhooks.html)

*   [Allowlist for local requests](#allowlist-for-local-requests)

# Webhooks and insecure internal web services[](#webhooks-and-insecure-internal-web-services "Permalink")

**注意:**在 GitLab.com 上[](../user/gitlab_com/index.html#maximum-number-of-webhooks)每个项目的[最大](../user/gitlab_com/index.html#maximum-number-of-webhooks) Webhooks [数量](../user/gitlab_com/index.html#maximum-number-of-webhooks)是有限的.

如果您在 GitLab 服务器上或其本地网络中运行了非 GitLab Web 服务,则可能容易受到 Webhooks 的利用.

使用[Webhooks](../user/project/integrations/webhooks.html) ,您以及您的项目维护者和所有者可以设置 URL,以便在项目中发生特定更改时触发该 URL. 通常,这些请求将发送到专门为此目的设置的外部 Web 服务,该服务以某种适当的方式处理该请求及其附加数据.

但是,当 Webhook 设置的 URL 不是指向外部服务而是指向内部服务时,事情变得很麻烦,当触发 Webhook 和发送 POST 请求时,这可能会做完全不希望的事情.

Webhook 请求由 GitLab 服务器本身发出,并且每个钩子使用一个(可选)秘密令牌进行授权(而不是用户或特定于仓库的令牌). 结果,它们可能比托管 Webhook 的服务器(可能包括 GitLab 服务器或 API 本身,例如`http://localhost:123` )上运行的所有对象具有更广泛的访问权限. 根据所调用的 Webhook,这也可能导致对该 Webhook 服务器的本地网络(例如, `http://192.168.1.12:345` : `http://192.168.1.12:345` : `http://192.168.1.12:345` )内的其他服务器的网络访问,即使这些服务受到其他保护并且无法从外界访问.

如果 Web 服务不需要身份验证,则可以通过使 GitLab 服务器向诸如`http://localhost:123/some-resource/delete`类的端点发出 POST 请求,来使用 Webhooks 触发破坏性命令.

为了防止发生这种类型的攻击,从 GitLab 10.6 开始,默认情况下将禁止对当前 GitLab 实例服务器地址和/或专用网络中的所有 Webhook 请求. 这意味着,所有的请求作出`127.0.0.1``::1``0.0.0.0` ,以及 IPv4 的`10.0.0.0/8``172.16.0.0/12``192.168.0.0/16`和 IPv6 站点本地( `ffc0::/10` )地址将不被允许.

通过在**管理区域>设置**`/admin/application_settings/network` )内*"出站请求"*部分中启用选项*"允许从 Web 挂钩和服务到本地网络的请求",*可以覆盖此行为:

[![Outbound requests admin settings](img/95cf4cb85bf824cf0817d4d93d93934d.png)](img/outbound_requests_section_v12_2.png)

**注意:由于** *系统挂钩*是由管理员设置的,因此默认情况下启用它们来向本地网络发出请求. 但是,可以通过禁用" **允许从系统挂钩向本地网络发送请求"**选项来关闭此功能.

## Allowlist for local requests[](#allowlist-for-local-requests "Permalink")

[Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/44496) in GitLab 12.2

通过将某些域和 IP 地址添加到允许*列表中,*即使不允许本地请求,也可以允许某些域和 IP 地址可供*系统挂钩**Web* *挂钩*访问. 导航到**管理区域>设置>网络**`/admin/application_settings/network` )并展开**出站请求**

[![Outbound local requests allowlist](img/77a2b247e60ad05b022cfd3f3a62c069.png)](img/allowlist_v13_0.png)

允许的条目可以用分号,逗号或空格(包括换行符)分隔,并且可以采用不同的格式,例如主机名,IP 地址和/或 IP 范围. 支持 IPv6\. 包含 Unicode 字符的主机名应使用 IDNA 编码.

允许列表最多可容纳 1000 个条目. 每个条目最多可以包含 255 个字符.

您可以通过在允许列表条目中指定特定端口来允许它. 例如`127.0.0.1:8080`将仅允许连接到`127.0.0.1`上的端口 8080\. 如果未提及任何端口,则允许该 IP /域上的所有端口. IP 范围将允许该范围内所有 IP 上的所有端口.

Example:

```
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 
```

**注意:**当前不支持通配符( `*.example.com` ).