Istio 1.29.3:两道授权防线被修补,以及 HBONE 窗口调优的新选项

2026-05-18 31 预计阅读时间:1 分钟
来源:istio.io AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:8 分钟

Istio 1.29.3 是一个以安全修复为主的补丁版本。如果你正在用 AuthorizationPolicy 做 SPIFFE 身份或命名空间匹配,或者依赖 XDS debug 端点做排障,这次升级不应拖延——两个授权绕过漏洞已被修复。此外,版本还加入了 Gateway API v1.4.1 支持、HBONE 连接窗口大小调优、AWS EKS ambient mesh 健康探测修复等实用改动。

AuthorizationPolicy 的正则逃逸漏洞

这是本次最值得警惕的修复。AuthorizationPolicy 在匹配 source.principals(后缀匹配模式,以 * 开头)和 source.namespaces 时,会把字段值直接嵌入 Envoy 的 SafeRegex 正则表达式,但没有对正则元字符做转义

这意味着:如果你的策略写的是 source.principals: ["*cluster.local/ns/default/sa/my-svc"],而实际 Kubernetes ServiceAccount 名里包含 .[ 等正则元字符(Kubernetes 允许这些字符出现在合法名称中),这些字符会被当作正则通配符解释,导致意料之外的身份通过匹配

举个例子:策略意图只允许 my-svc.ext 这个 SA,但 .ext 在正则里匹配任意字符加 ext——my-svcXext 也能通过。

修复后,Istio 在生成 Envoy 配置时会对这些字段做正则转义,确保元字符只代表字面量。

检查你的策略是否受影响

运行以下命令,列出所有使用了 source.principals 后缀匹配或 source.namespaces 的 AuthorizationPolicy:

# 查找所有使用 source.principals 或 source.namespaces 的授权策略
kubectl get authorizationpolicies -A -o json \
  | jq -r '.items[] | select(.spec.rules[].from[].source.principals != null or .spec.rules[].from[].source.namespaces != null) | "\(.metadata.namespace)/\(.metadata.name): principals=\(.spec.rules[].from[].source.principals // []) namespaces=\(.spec.rules[].from[].source.namespaces // [])"'

如果输出中有包含 .*[( 等字符的值,且匹配模式是后缀匹配(source.principals* 开头),你的集群在 1.29.2 及更早版本上存在绕过风险。升级到 1.29.3 即可修复。

XDS Debug 端点的跨命名空间泄露

另一个安全修复涉及 istiod 的 StatusGen 模块提供的 XDS debug 端点(istio.io/debug/synczistio.io/debug/config_dump)。在旧版本中,任何已认证的 workload 都能从任意命名空间调用这些端点,枚举集群中的 proxy 并获取其他命名空间 workload 的配置 dump——这等于把服务拓扑和配置细节暴露给了所有租户。

1.29.3 修复后,非系统调用者只能访问同一命名空间的 debug 信息。漏洞发现者 1seal 已获致谢。

如果你此前通过 NetworkPolicy 或其他手段限制了对 istiod 15014/15017 端口的访问,这个修复提供了额外的纵深防御;但如果你没有做这类限制,升级前这些端点数据已经可被任意 workload 读取。

HBONE 连接窗口大小可调了

新版本引入了两个 feature flag:

  • PILOT_HBONE_INITIAL_STREAM_WINDOW_SIZE
  • PILOT_HBONE_INITIAL_CONNECTION_WINDOW_SIZE

它们控制 HBONE 连接(用于 waypoint 和 east-west gateway 的上游集群)的初始 stream 和 connection 窗口大小。默认值可能带来不必要的缓冲延迟,尤其在高吞吐、低延迟场景下。你可以通过 istiod 环境变量来调整:

# istiod Deployment 中添加环境变量示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: istiod
  namespace: istio-system
spec:
  template:
    spec:
      containers:
      - name: discovery
        env:
        - name: PILOT_HBONE_INITIAL_STREAM_WINDOW_SIZE
          value: "65536"   # 64KB,默认值更大,减小可降低缓冲
        - name: PILOT_HBONE_INITIAL_CONNECTION_WINDOW_SIZE
          value: "1048576" # 1MB

调整前建议在测试环境用 istioctl proxy-config endpoint 观察 HBONE 连接的流量分布,确认减小窗口后没有触发频繁的 WINDOW_UPDATE 帧导致吞吐下降。

其他值得注意的修复

证书过期时间溢出:Istiod 此前可能签发 NotAfter 超过签名证书过期时间的 leaf certificate——这意味着在签名证书已失效后,leaf 证书仍被认为有效。1.29.3 修复了这个问题,签发时会正确截断 NotAfter。

多集群 secret controller 死锁:在远程集群更新期间,multicluster secret controller 可能陷入死锁。这在频繁变更远程集群 kubeconfig 的场景下尤其恼人,现已修复。

AWS EKS ambient mesh 健康探测:使用 Security Groups for Pods(branch ENI)的 EKS 节点上,ambient mesh pod 的 kubelet 健康探测会失败——istio-cni 现在能检测 branch ENI pod 并添加 IP 规则,让探测流量走 veth pair 而非 VPC fabric。功能由 AMBIENT_ENABLE_AWS_BRANCH_ENI_PROBE flag 控制,默认启用。

istioctl analyze 新警告 IST0175:当你配置了 RequestAuthentication 资源但未在 istiod 上设置 BLOCKED_CIDRS_IN_JWKS_URIS 时,istioctl analyze 会发出 IST0175 警告。这提醒你:JWKS URI 如果指向内网 IP,可能被恶意请求利用为 SSRF 入口。建议在 istiod 启动参数中加上:

# 在 istiod 启动参数或环境变量中配置
- name: BLOCKED_CIDRS_IN_JWKS_URIS
  value: "127.0.0.1/8,169.254.169.254/32,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"

Gateway API v1.4.1 支持:Istio 现在正式支持 Gateway API v1.4.1,如果你在用 Gateway API CRD 管理 Ingress 或 mesh gateway,可以升级 CRD 版本以使用新字段。

升级 Checklist

  1. 立即评估 AuthorizationPolicy 绕过风险——用上面的 jq 命令扫描集群中所有策略,确认是否有含正则元字符的身份匹配规则。如果有,优先升级。
  2. 检查 XDS debug 端点的访问范围——如果你没有用 NetworkPolicy 限制 istiod debug 端口,升级前任何 workload 都可能已读取配置 dump。升级后确认非系统调用者只能访问同命名空间数据。
  3. 验证证书链——升级后用 istioctl proxy-config secret 检查 leaf 证书的 NotAfter 是否在签名证书有效期之内。
  4. EKS ambient mesh 用户——确认 istio-cni 版本同步升级,观察 branch ENI pod 的健康探测是否恢复正常。
  5. HBONE 调优——如果你在用 waypoint 或 east-west gateway 且观察到不必要的缓冲延迟,可以在测试环境尝试调小窗口大小。

Istio 1.29.3 的改动不多但分量不轻——两个授权绕过漏洞意味着升级不是"可选项",而是"应尽快执行"。


相关推荐