未认证/低权限远程拒绝服务漏洞,攻击者可通过超大 AdmissionReview 请求使 ingress-nginx 控制器 Pod 崩溃。
ingress-nginx 验证准入 webhook(启用时)未对传入的 AdmissionReview 对象大小实施合理限制。
能够访问 webhook 端点的攻击者——即使仅拥有低权限——也可提交极大的 JSON 载荷,迫使控制器进程分配大量内存。
后果包括:
CVSS v3.1 基础评分
6.5 中等
向量字符串
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
弱点
CWE-770:无限制或无节流的资源分配
致谢
Mohammed Idrees Banyamer – @banyamer_security(约旦)
| 组件 | 受影响版本 | 修复版本 | 默认启用 Webhook? |
|---|---|---|---|
| ingress-nginx | < 1.13.7 | ≥ 1.13.7 | 否 |
| ingress-nginx (1.14.x) | < 1.14.3 | ≥ 1.14.3 | 否 |
注意: 该漏洞仅在验证准入 webhook 功能被显式启用时才会显现。
sequenceDiagram
participant Attacker as 低权限攻击者<br>(集群内部/相邻)
participant API as kube-apiserver
participant WebhookConfig as ValidatingWebhookConfiguration<br>(ingress-nginx-admission)
participant AdmissionSvc as ingress-nginx-admission<br>Service / Pod
participant Controller as ingress-nginx 控制器进程
Note over Attacker,Controller: 攻击前提:webhook 已启用 + 端点可达
Attacker->>API: 1. 创建/更新大型 Ingress 资源<br>或直接 POST 到 webhook 端点
API->>WebhookConfig: 2. 触发准入审查
WebhookConfig->>AdmissionSvc: 3. 转发 AdmissionReview v1 请求<br>(非常大的 JSON 主体)
AdmissionSvc->>Controller: 4. 接收并开始解析巨大载荷
activate Controller
Note right of Controller: 受影响版本中无请求体大小限制
Controller-->>Controller: 5. 为大型字符串/对象分配内存<br>(堆急剧增长 → OOM 迫近)
Controller->>AdmissionSvc: 6. (因内存耗尽而失败/挂起)
deactivate Controller
Kubernetes->>AdmissionSvc: 7. kubelet 检测到内存限制被突破
Kubernetes->>AdmissionSvc: 8. OOMKill 容器
AdmissionSvc-->>API: 9. Webhook 超时 / 连接被拒绝
API-->>Attacker: 10. 准入被拒绝或超时<br>(Ingress 创建失败)
Note over Attacker,Kubernetes: 结果:
Note over Attacker,Kubernetes: • ingress-nginx Pod 重启/崩溃
Note over Attacker,Kubernetes: • 暂时失去 Ingress 验证
Note over Attacker,Kubernetes: • 新 Ingress 可能出现短暂服务中断
Note over Attacker,Kubernetes: • 低内存集群中可能出现节点压力
重要提示: 该漏洞只能在获得明确许可的隔离实验室/测试集群中演示。
在生产环境中运行此漏洞利用是违法的,并可能导致服务中断。
推荐的安全测试方法:
# 1. 将准入服务本地端口转发
kubectl port-forward svc/ingress-nginx-controller-admission \
8443:443 -n ingress-nginx
# 2. 使用递增的载荷大小运行 PoC(从小开始!)
python3 cve-2026-24514-Kubernetes.py https://localhost:8443/validate 25 --insecure
# 3. 在另一个终端监控内存与 Pod 状态
watch -n 2 'kubectl top pods -n ingress-nginx && kubectl get pods -n ingress-nginx'
# 更激进的示例(谨慎使用)
python3 cve-2026-24514-Kubernetes.py https://localhost:8443/validate 80 --insecure
python3 cve-2026-24514-Kubernetes.py https://localhost:8443/validate 150 --insecure --field-name enormousJunk
现实攻击场景:
--enable-validating-webhook=false)负责任披露与 PoC 致谢: Mohammed Idrees Banyamer(@banyamer_security)