ISTIO-SECURITY-2019-003

解析正则表达式导致的拒绝服务。

Aug 13, 2019

安全漏洞详情
CVE(s)CVE-2019-14993
CVSS 影响评分7.5 CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
受影响的版本1.1 to 1.1.12
1.2 to 1.2.3

一位 Envoy 用户报告了一个 (c.f. Envoy Issue 7728) 关于非常大的 URI 的正则表达式会导致 Envoy 崩溃的问题。通过调查,Istio 团队发现如果用户正在这些 Istio API(JWT, VirtualService, HTTPAPISpecBinding, QuotaSpecBinding)中使用正则表达式,那么这个问题可能在 Istio 中引发 Dos 攻击。

影响范围

运行下面的命令可以打印下面的输出,检测在您的集群中是否使用了 Istio 正则表达式相关的 API。

$ cat <<'EOF' | bash -
set -e
set -u
set -o pipefail

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`

echo "Checking regex usage in Istio API ..."

AFFECTED=()

JWT_REGEX=()
JWT_REGEX+=($(kubectl get Policy --all-namespaces -o jsonpath='{..regex}'))
JWT_REGEX+=($(kubectl get MeshPolicy --all-namespaces -o jsonpath='{..regex}'))
if [ "${#JWT_REGEX[@]}" != 0 ]; then
  AFFECTED+=("AuthenticationPolicy")
fi

VS_REGEX=()
VS_REGEX+=($(kubectl get VirtualService --all-namespaces -o jsonpath='{..regex}'))
if [ "${#VS_REGEX[@]}" != 0 ]; then
  AFFECTED+=("VirtualService")
fi

HTTPAPI_REGEX=()
HTTPAPI_REGEX+=($(kubectl get HTTPAPISpec --all-namespaces -o jsonpath='{..regex}'))
if [ "${#HTTPAPI_REGEX[@]}" != 0 ]; then
  AFFECTED+=("HTTPAPISpec")
fi

QUOTA_REGEX=()
QUOTA_REGEX+=($(kubectl get QuotaSpec --all-namespaces -o jsonpath='{..regex}'))
if [ "${#QUOTA_REGEX[@]}" != 0 ]; then
  AFFECTED+=("QuotaSpec")
fi

if [ "${#AFFECTED[@]}" != 0 ]; then
  echo "${red}YOU ARE AFFECTED: found regex used in ${AFFECTED[@]}${reset}"
  exit 1
fi

echo "${green}YOU ARE NOT AFFECTED: did not find regex usage${reset}"
EOF

防范

漏洞报告

希望大家遵循漏洞报告步骤,以报告任何可能会导致安全漏洞的 bug。