ISTIO-SECURITY-2021-008

多个与 AuthorizationPolicy、EnvoyFilter 和 Envoy 相关的 CVEs。

Aug 24, 2021

安全漏洞详情
CVE(s)CVE-2021-32777
CVE-2021-32781
CVE-2021-32778
CVE-2021-32780
CVE-2021-39155
CVE-2021-39156
CVSS 影响评分8.6 AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
受影响的版本All releases prior to 1.9.8
1.10.0 to 1.10.3
1.11.0

CVE

Envoy 以及下面的 Istio 容易受到六个新发现的漏洞的攻击(注意 Envoy 的 CVE-2021-32779 与 Istio 的 CVE-2021-39156 合并):

CVE-2021-39156 (CVE-2021-32779)

Istio 包含一个可远程利用的漏洞,CVE-2021-39156, 其中 HTTP 请求中 # 在 URL 路径中的片段(URI 末尾以字符 # 开头的部分)可以绕过 Istio 的基于 URI 路径的授权策略。例如,Istio 授权策略拒绝 发送到 URI 路径 /user/profile 的请求。在易受攻击的版本中,带有 URI 路径的请求 /user/profile#section1 会绕过拒绝策略并路由到后端 (使用规范化的 URI 路径 /user/profile%23section1),这可能会导致安全事件。

该修复取决于 Envoy 的修复,该修复与 CVE-2021-32779 相关联。

如果出现以下情况,你会受到此漏洞的影响:

如果采用 防范措施,在授权和路由之前删除请求 URI 的片段部分。这可以防止在其 URI 中包含片段的请求绕过基于没有片段部分的 URI 的授权策略。

如果不采用 防范措施 的新策略,将保留 URI 中的片段部分。您可以按照如下方式配置您的安装:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  name: opt-out-fragment-cve-fix
  namespace: istio-system
spec:
  meshConfig:
    defaultConfig:
      proxyMetadata:
        HTTP_STRIP_FRAGMENT_FROM_PATH_UNSAFE_IF_DISABLED: "false"

CVE-2021-39155

Istio 包含一个可远程利用的漏洞,当使用基于 hostsnotHosts 的规则时, HTTP 请求可能会绕过 Istio 授权策略。在易受攻击的版本中, Istio 授权策略以区分大小写的方式比较 HTTP 的 Host:authority 头,这与 RFC 4343 不一致。例如,用户可能有一个拒绝带有 host secret.com 的请求的授权策略,但攻击者可以通过发送带有主机名 Secret.com 的请求来绕过这一点,流量将被路由到 secret.com ,这一行为违反了授权策略。

有关更多信息,请参阅 CVE-2021-39155

如果出现以下情况,您会受到此漏洞的影响:

通过 防范措施,当使用基于 hostsnotHosts 的授权策略时, Istio 授权策略比较 HTTP 的 Host:authority 报头,对 hostsnotHosts 规格不区分大小写。

CVE-2021-32777

Envoy 包含一个可远程利用的漏洞,当使用 ext_authz 扩展时,带有多个值标头的 HTTP 请求可能会执行不完整的授权策略检查。当请求头包含多个值时,外部授权服务器只会看到给定头的最后一个值。有关更多信息,请参阅 CVE-2021-32777

如果出现一下情况,您会受此漏洞的影响:

CVE-2021-32778

Envoy 包含一个可远程利用的漏洞,其中 Envoy 客户端打开后重置大量的 HTTP/2 请求,可能会导致 CPU 消耗过多。有关信息,请参阅 CVE-2021-32778

如果您使用早于 1.9.8,1.10.4 或 1.11.1 的 Istio 补丁版本,则会受到此漏洞的影响。

CVE-2021-32780

Envoy 包含一个可远程利用的漏洞,其中不受信任的上游服务可能会导致 Envoy 通过发送 GOAWAY 祯和设置 SETTINGS_MAX_CONCURRENT_STREAMS 参数为 0 的 SETTINGS 帧异常终止。有关更多信息,请参阅 CVE-2021-32780

如果您使用 Istio 1.10.0 至 1.10.3 或 1.11.0 的补丁版本,则会受到此漏洞的影响,

CVE-2021-32781

Envoy 包含一个可远程利用的漏洞,它会影响 Envoy 的 decompressor, json-transcoder 或者 grpc-web 插件,同时会影响能够修改或增加请求或响应主体的大小的专有插件。在 Envoy 插件中修改和增加主体的大小超出内部缓冲区大小可能会导致 Envoy 访问已释放的内存并异常终止。有关更多信息,请参阅 CVE-2021-32781

如果出现以下情况,您会受到此漏洞的影响:

防范措施

要防范上述 CVE,请将您的集群更新到最新的受支持的版本:

非 CVE 漏洞

Istio 不会忽略 AuthorizationPolicyhostnotHosts 的端口比较

创建 VirtualServiceGateway 时,Istio 生成匹配主机名本身和具有所有匹配端口的主机名的配置。例如,主机 httpbin.foo 生成的 VirtualServiceGateway 配置匹配 httpbin.foohttpbin.foo:* 。但是,AuthorizationPolicy 使用精确匹配时,仅匹配 hostsnotHosts 字段给出的精确字符串。

如果您使用 AuthorizationPolicyhostsnotHosts 进行精确的字符串比较,您的集群会受到影响。

AuthorizationPolicy 防范

更新您的授权策略规则 以使用前缀匹配而不是精确匹配。例如,要匹配主机 httpbin.comVirtualServiceGateway ,请使用 hosts: ["httpbin.com", "httpbin.com:*"] 创建一个 AuthorizationPolicy ,如下所示。

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: httpbin
  namespace: foo
spec:
  action: DENY
  rules:
  - from:
    - source:
        namespaces: ["dev"]
    to:
    - operation:
        hosts: ["httpbin.com", "httpbin.com:*"]

致谢

我们要感谢 Yangmin Zhu (Google) 报告了上述一些问题。