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。