You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: modules/ossm-rn-new-features-1x.adoc
+115Lines changed: 115 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,6 +44,121 @@ This release of {ProductName} addresses Common Vulnerabilities and Exposures (CV
44
44
45
45
This release of {ProductName} addresses Common Vulnerabilities and Exposures (CVEs) and bug fixes.
46
46
47
+
[IMPORTANT]
48
+
====
49
+
There are manual steps that must be completed to address CVE-2021-29492 and CVE-2021-31920.
50
+
====
51
+
52
+
[id="manual-updates-cve-2021-29492_{context}"]
53
+
=== Manual updates required by CVE-2021-29492 and CVE-2021-31920
54
+
55
+
Istio contains a remotely exploitable vulnerability where an HTTP request path with multiple slashes or escaped slash characters (``%2F` or ``%5C`) could potentially bypass an Istio authorization policy when path-based authorization rules are used.
56
+
57
+
For example, assume an Istio cluster administrator defines an authorization DENY policy to reject the request at path `/admin`. A request sent to the URL path `//admin` will NOT be rejected by the authorization policy.
58
+
59
+
According to https://tools.ietf.org/html/rfc3986#section-6[RFC 3986], the path `//admin` with multiple slashes should technically be treated as a different path from the `/admin`. However, some backend services choose to normalize the URL paths by merging multiple slashes into a single slash. This can result in a bypass of the authorization policy (`//admin` does not match `/admin`), and a user can access the resource at path `/admin` in the backend; this would represent a security incident.
60
+
61
+
Your cluster is impacted by this vulnerability if you have authorization policies using `ALLOW action + notPaths` field or `DENY action + paths field` patterns. These patterns are vulnerable to unexpected policy bypasses.
62
+
63
+
Your cluster is NOT impacted by this vulnerability if:
64
+
65
+
* You don’t have authorization policies.
66
+
* Your authorization policies don’t define `paths` or `notPaths` fields.
67
+
* Your authorization policies use `ALLOW action + paths` field or `DENY action + notPaths` field patterns. These patterns could only cause unexpected rejection instead of policy bypasses. The upgrade is optional for these cases.
68
+
69
+
[NOTE]
70
+
====
71
+
The {ProductName} configuration location for path normalization is different from the Istio configuration.
72
+
====
73
+
74
+
=== Updating the path normalization configuration
75
+
76
+
Istio authorization policies can be based on the URL paths in the HTTP request.
77
+
https://en.wikipedia.org/wiki/URI_normalization[Path normalization], also known as URI normalization, modifies and standardizes the incoming requests' paths so that the normalized paths can be processed in a standard way.
78
+
Syntactically different paths may be equivalent after path normalization.
79
+
80
+
Istio supports the following normalization schemes on the request paths before evaluating against the authorization policies and routing the requests:
81
+
82
+
.Normalization schemes
83
+
[options="header"]
84
+
[cols="a, a, a, a"]
85
+
|====
86
+
| Option | Description | Example |Notes
87
+
|`NONE`
88
+
|No normalization is done. Anything received by Envoy will be forwarded exactly as-is to any backend service.
89
+
|`../%2Fa../b` is evaluated by the authorization policies and sent to your service.
90
+
|This setting is vulnerable to CVE-2021-31920.
91
+
92
+
|`BASE`
93
+
|This is currently the option used in the *default* installation of Istio. This applies the https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto#envoy-v3-api-field-extensions-filters-network-http-connection-manager-v3-httpconnectionmanager-normalize-path[`normalize_path`] option on Envoy proxies, which follows https://tools.ietf.org/html/rfc3986[RFC 3986] with extra normalization to convert backslashes to forward slashes.
94
+
|`/a/../b` is normalized to `/b`. `\da` is normalized to `/da`.
95
+
|This setting is vulnerable to CVE-2021-31920.
96
+
97
+
| `MERGE_SLASHES`
98
+
| Slashes are merged after the _BASE_ normalization.
99
+
| `/a//b` is normalized to `/a/b`.
100
+
|Update to this setting to mitigate CVE-2021-31920.
101
+
102
+
|`DECODE_AND_MERGE_SLASHES`
103
+
|The strictest setting when you allow all traffic by default. This setting is recommended, with the caveat that you must thoroughly test your authorization policies routes. https://tools.ietf.org/html/rfc3986#section-2.1[Percent-encoded] slash and backslash characters (`%2F`, `%2f`, `%5C` and `%5c`) are decoded to `/` or `\`, before the `MERGE_SLASHES` normalization.
104
+
|`/a%2fb` is normalized to `/a/b`.
105
+
|Update to this setting to mitigate CVE-2021-31920. This setting is more secure, but also has the potential to break applications. Test your applications before deploying to production.
106
+
|====
107
+
108
+
The normalization algorithms are conducted in the following order:
109
+
110
+
. Percent-decode `%2F`, `%2f`, `%5C` and `%5c`.
111
+
. The https://tools.ietf.org/html/rfc3986[RFC 3986] and other normalization implemented by the https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto#envoy-v3-api-field-extensions-filters-network-http-connection-manager-v3-httpconnectionmanager-normalize-path[`normalize_path`] option in Envoy.
112
+
. Merge slashes.
113
+
114
+
[WARNING]
115
+
====
116
+
While these normalization options represent recommendations from HTTP standards and common industry practices, applications may interpret a URL in any way it chooses to. When using denial policies, ensure that you understand how your application behaves.
117
+
====
118
+
119
+
=== Path normalization configuration examples
120
+
121
+
Ensuring Envoy normalizes request paths to match your backend services' expectations is critical to the security of your system.
122
+
The following examples can be used as a reference for you to configure your system.
123
+
The normalized URL paths, or the original URL paths if `NONE` is selected, will be:
124
+
125
+
. Used to check against the authorization policies.
126
+
. Forwarded to the backend application.
127
+
128
+
.Configuration examples
129
+
[options="header"]
130
+
[cols="a, a"]
131
+
|====
132
+
|If your application... |Choose...
133
+
|Relies on the proxy to do normalization
134
+
|`BASE`, `MERGE_SLASHES` or `DECODE_AND_MERGE_SLASHES`
135
+
136
+
|Normalizes request paths based on https://tools.ietf.org/html/rfc3986[RFC 3986] and does not merge slashes.
137
+
|`BASE`
138
+
139
+
|Normalizes request paths based on https://tools.ietf.org/html/rfc3986[RFC 3986] and merges slashes, but does not decode https://tools.ietf.org/html/rfc3986#section-2.1[percent-encoded] slashes.
140
+
|`MERGE_SLASHES`
141
+
142
+
|Normalizes request paths based on https://tools.ietf.org/html/rfc3986[RFC 3986], decodes https://tools.ietf.org/html/rfc3986#section-2.1[percent-encoded] slashes, and merges slashes.
143
+
|`DECODE_AND_MERGE_SLASHES`
144
+
145
+
|Processes request paths in a way that is incompatible with https://tools.ietf.org/html/rfc3986[RFC 3986].
146
+
|`NONE`
147
+
|====
148
+
149
+
=== Configuring your SMCP for path normalization
150
+
151
+
To configure path normalization for {ProductName}, specify the following in your `ServiceMeshControlPlane`. Use the configuration examples to help determine the settings for your system.
152
+
153
+
.SMCP v1 pathNormalization
154
+
[source,yaml]
155
+
----
156
+
spec:
157
+
global:
158
+
pathNormalization: <option>
159
+
----
160
+
161
+
47
162
== New features {ProductName} 1.1.13
48
163
49
164
This release of {ProductName} addresses Common Vulnerabilities and Exposures (CVEs) and bug fixes.
Copy file name to clipboardExpand all lines: modules/ossm-rn-new-features.adoc
+162Lines changed: 162 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,6 +44,168 @@ This release of {ProductName} addresses Common Vulnerabilities and Exposures (CV
44
44
45
45
This release of {ProductName} addresses Common Vulnerabilities and Exposures (CVEs) and bug fixes.
46
46
47
+
[IMPORTANT]
48
+
====
49
+
There are manual steps that must be completed to address CVE-2021-29492 and CVE-2021-31920.
50
+
====
51
+
52
+
[id="manual-updates-cve-2021-29492_{context}"]
53
+
=== Manual updates required by CVE-2021-29492 and CVE-2021-31920
54
+
55
+
Istio contains a remotely exploitable vulnerability where an HTTP request path with multiple slashes or escaped slash characters (``%2F` or ``%5C`) could potentially bypass an Istio authorization policy when path-based authorization rules are used.
56
+
57
+
For example, assume an Istio cluster administrator defines an authorization DENY policy to reject the request at path `/admin`. A request sent to the URL path `//admin` will NOT be rejected by the authorization policy.
58
+
59
+
According to https://tools.ietf.org/html/rfc3986#section-6[RFC 3986], the path `//admin` with multiple slashes should technically be treated as a different path from the `/admin`. However, some backend services choose to normalize the URL paths by merging multiple slashes into a single slash. This can result in a bypass of the authorization policy (`//admin` does not match `/admin`), and a user can access the resource at path `/admin` in the backend; this would represent a security incident.
60
+
61
+
Your cluster is impacted by this vulnerability if you have authorization policies using `ALLOW action + notPaths` field or `DENY action + paths field` patterns. These patterns are vulnerable to unexpected policy bypasses.
62
+
63
+
Your cluster is NOT impacted by this vulnerability if:
64
+
65
+
* You don’t have authorization policies.
66
+
* Your authorization policies don’t define `paths` or `notPaths` fields.
67
+
* Your authorization policies use `ALLOW action + paths` field or `DENY action + notPaths` field patterns. These patterns could only cause unexpected rejection instead of policy bypasses. The upgrade is optional for these cases.
68
+
69
+
[NOTE]
70
+
====
71
+
The {ProductName} configuration location for path normalization is different from the Istio configuration.
72
+
====
73
+
74
+
=== Updating the path normalization configuration
75
+
76
+
Istio authorization policies can be based on the URL paths in the HTTP request.
77
+
https://en.wikipedia.org/wiki/URI_normalization[Path normalization], also known as URI normalization, modifies and standardizes the incoming requests' paths so that the normalized paths can be processed in a standard way.
78
+
Syntactically different paths may be equivalent after path normalization.
79
+
80
+
Istio supports the following normalization schemes on the request paths before evaluating against the authorization policies and routing the requests:
81
+
82
+
.Normalization schemes
83
+
[options="header"]
84
+
[cols="a, a, a, a"]
85
+
|====
86
+
| Option | Description | Example |Notes
87
+
|`NONE`
88
+
|No normalization is done. Anything received by Envoy will be forwarded exactly as-is to any backend service.
89
+
|`../%2Fa../b` is evaluated by the authorization policies and sent to your service.
90
+
|This setting is vulnerable to CVE-2021-31920.
91
+
92
+
|`BASE`
93
+
|This is currently the option used in the *default* installation of Istio. This applies the https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto#envoy-v3-api-field-extensions-filters-network-http-connection-manager-v3-httpconnectionmanager-normalize-path[`normalize_path`] option on Envoy proxies, which follows https://tools.ietf.org/html/rfc3986[RFC 3986] with extra normalization to convert backslashes to forward slashes.
94
+
|`/a/../b` is normalized to `/b`. `\da` is normalized to `/da`.
95
+
|This setting is vulnerable to CVE-2021-31920.
96
+
97
+
| `MERGE_SLASHES`
98
+
| Slashes are merged after the _BASE_ normalization.
99
+
| `/a//b` is normalized to `/a/b`.
100
+
|Update to this setting to mitigate CVE-2021-31920.
101
+
102
+
|`DECODE_AND_MERGE_SLASHES`
103
+
|The strictest setting when you allow all traffic by default. This setting is recommended, with the caveat that you must thoroughly test your authorization policies routes. https://tools.ietf.org/html/rfc3986#section-2.1[Percent-encoded] slash and backslash characters (`%2F`, `%2f`, `%5C` and `%5c`) are decoded to `/` or `\`, before the `MERGE_SLASHES` normalization.
104
+
|`/a%2fb` is normalized to `/a/b`.
105
+
|Update to this setting to mitigate CVE-2021-31920. This setting is more secure, but also has the potential to break applications. Test your applications before deploying to production.
106
+
|====
107
+
108
+
The normalization algorithms are conducted in the following order:
109
+
110
+
. Percent-decode `%2F`, `%2f`, `%5C` and `%5c`.
111
+
. The https://tools.ietf.org/html/rfc3986[RFC 3986] and other normalization implemented by the https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto#envoy-v3-api-field-extensions-filters-network-http-connection-manager-v3-httpconnectionmanager-normalize-path[`normalize_path`] option in Envoy.
112
+
. Merge slashes.
113
+
114
+
[WARNING]
115
+
====
116
+
While these normalization options represent recommendations from HTTP standards and common industry practices, applications may interpret a URL in any way it chooses to. When using denial policies, ensure that you understand how your application behaves.
117
+
====
118
+
119
+
=== Path normalization configuration examples
120
+
121
+
Ensuring Envoy normalizes request paths to match your backend services' expectations is critical to the security of your system.
122
+
The following examples can be used as a reference for you to configure your system.
123
+
The normalized URL paths, or the original URL paths if `NONE` is selected, will be:
124
+
125
+
. Used to check against the authorization policies.
126
+
. Forwarded to the backend application.
127
+
128
+
.Configuration examples
129
+
[options="header"]
130
+
[cols="a, a"]
131
+
|====
132
+
|If your application... |Choose...
133
+
|Relies on the proxy to do normalization
134
+
|`BASE`, `MERGE_SLASHES` or `DECODE_AND_MERGE_SLASHES`
135
+
136
+
|Normalizes request paths based on https://tools.ietf.org/html/rfc3986[RFC 3986] and does not merge slashes.
137
+
|`BASE`
138
+
139
+
|Normalizes request paths based on https://tools.ietf.org/html/rfc3986[RFC 3986] and merges slashes, but does not decode https://tools.ietf.org/html/rfc3986#section-2.1[percent-encoded] slashes.
140
+
|`MERGE_SLASHES`
141
+
142
+
|Normalizes request paths based on https://tools.ietf.org/html/rfc3986[RFC 3986], decodes https://tools.ietf.org/html/rfc3986#section-2.1[percent-encoded] slashes, and merges slashes.
143
+
|`DECODE_AND_MERGE_SLASHES`
144
+
145
+
|Processes request paths in a way that is incompatible with https://tools.ietf.org/html/rfc3986[RFC 3986].
146
+
|`NONE`
147
+
|====
148
+
149
+
=== Configuring your SMCP for path normalization
150
+
151
+
To configure path normalization for {ProductName}, specify the following in your `ServiceMeshControlPlane`. Use the configuration examples to help determine the settings for your system.
152
+
153
+
.SMCP v2 pathNormalization
154
+
[source,yaml]
155
+
----
156
+
spec:
157
+
techPreview:
158
+
global:
159
+
pathNormalization: <option>
160
+
----
161
+
162
+
=== Configuring for case normalization
163
+
164
+
In some environments, it may be useful to have paths in authorization policies compared in a case insensitive manner.
165
+
For example, treating `https://myurl/get` and `https://myurl/GeT` as equivalent.
166
+
In those cases, you can use the `EnvoyFilter` shown below.
167
+
This filter will change both the path used for comparison and the path presented to the application.
168
+
169
+
Save the `EnvoyFilter` to a file and execute the following command:
0 commit comments