doc/security/webhooks.md
{{< details >}}
{{< /details >}}
To protect against the risk of data loss and exposure, GitLab administrators can now use outbound request filtering controls to restrict certain outbound requests made by the GitLab instance.
Users with the Maintainer or Owner role can set up webhooks that are
triggered when specific changes occur in a project or group. When triggered, a POST HTTP request is sent to a URL. A webhook is
usually configured to send data to a specific external web service, which processes the data in an appropriate way.
However, a webhook can be configured with a URL for an internal web service instead of an external web service. When the webhook is triggered, non-GitLab web services running on your GitLab server or in its local network could be exploited.
Webhook requests are made by the GitLab server itself and use a single optional secret token per hook for authorization instead of:
As a result, these requests can have broader access than intended, including access to everything running on the server that hosts the webhook including:
Webhooks can be used to trigger destructive commands using web services that don't require authentication. These webhooks
can get the GitLab server to make POST HTTP requests to endpoints that delete resources.
Prerequisites:
To prevent exploitation of insecure internal web services, all webhook and integration requests to the following local network addresses are not allowed:
127.0.0.1, ::1, 0.0.0.0, 10.0.0.0/8, 172.16.0.0/12,
192.168.0.0/16, and IPv6 site-local (ffc0::/10) addresses.To allow access to these addresses:
Prerequisites:
System hooks can make requests to the local network by default. To prevent system hook requests to the local network:
Prerequisites:
DNS rebinding is a technique to make a malicious domain name resolve to an internal network resource to bypass local network access restrictions. GitLab has protection against this attack enabled by default. To disable this protection:
{{< history >}}
{{< /history >}}
Prerequisites:
To filter requests by blocking many requests:
When this checkbox is selected, requests to the following are still not blocked:
When this setting is enabled, GitLab may perform DNS resolution on URLs included in other objects, such as Release Links. If DNS resolution fails, the request fails. To resolve this issue, add the hostname to the allowlist, even if GitLab never needs to make an outbound connection to that host.
This setting is respected by the main GitLab application only, so other services like Gitaly can still make requests that break the rule. Additionally, some areas of GitLab do not respect outbound filtering rules.
Prerequisites:
To allow outbound requests to certain IP addresses and domains:
The entries can:
127.0.0.1:8080 only allows connections to port 8080 on 127.0.0.1. If no port is specified,
all ports on that IP address or domain are allowed. An IP address range allows all ports on all IP addresses in that
range.*.example.com).For 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
When filtering outbound requests, you might encounter the following issues.
You can only select the Block all requests, except for IP addresses, IP ranges, and domain names defined in the allowlist checkbox if no configured URLs would be blocked. Otherwise, you might get an error message that says the URL is blocked.
If you can't enable this setting, do one of the following:
Most GitLab instances have their public_runner_releases_url set to
https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab-runner/releases,
which can prevent you from filtering requests.
To resolve this issue, configure GitLab to no longer fetch runner release version data from GitLab.com.
When you filter requests, GitLab subscription management is blocked.
To work around this problem, add customers.gitlab.com:443 to the
allowlist.
When you filter requests, you might get an error that states Help page documentation base url is blocked: Requests to hosts and IP addresses not on the Allow List are denied.
To work around this error:
Help page documentation base url is blocked does not appear anymore.docs.gitlab.com , or the redirect help documentation pages URL to the allowlist.When you filter requests, you might see 401 errors when trying to use GitLab Duo features.
This error can occur when outbound requests to the GitLab cloud server are not allowed. To work around this error:
https://cloud.gitlab.com:443 to the allowlist.