
Docker लैब जो CVE-2026-42533 को पुनः उत्पन्न करती है, जो दो-पास कैप्चर क्लॉबरिंग के माध्यम से एक pre-auth nginx heap overflow और info leak है, जिसमें PoC स्क्रिप्ट और patched तुलना शामिल है।
CVSS 9.2 (Critical) — nginx में Pre-auth heap buffer overflow + info leak प्रभावित: nginx 0.9.6 – 1.30.3 / 1.31.2 | पैच किया गया: 1.30.4 / 1.31.3
┌─────────────────────────────────────┐
│ Host machine │
│ │
PoC scripts ──────┤ :8080 ──► nginx-vuln (1.26.x) │
│ │ VULNERABLE │
│ ▼ │
│ backend (Python echo) │
│ ▲ │
│ │ │
│ :8081 ──► nginx-patched (1.30.4) │
│ SAFE │
└─────────────────────────────────────┘
# Build and start
docker compose up --build -d
# Verify
curl http://localhost:8080/health
curl http://localhost:8081/health
# Run PoC
python3 poc_overflow.py # Heap overflow (crash worker)
python3 poc_infoleak.py # Info leak (heap residue)
bash poc_curl.sh # Quick curl-based tests
# Compare with patched
python3 poc_overflow.py localhost 8081
python3 poc_infoleak.py localhost 8081
# Check for crashes
docker logs nginx-vuln 2>&1 | grep -iE 'signal|segfault|abort'
# Cleanup
docker compose down
nginx डायरेक्टिव मानों (proxy_set_header, return, add_header, आदि) का मूल्यांकन
दो पास में एक साझा परिवर्तनशील ऐरे r->captures का उपयोग करके करता है:
| पास | उद्देश्य | r->captures पढ़ता है |
|---|---|---|
| LEN | आवश्यक बफ़र आकार मापें | हाँ — $1 की लंबाई प्राप्त करने के लिए |
(regex map यहाँ मूल्यांकन करता है, r->captures को CLOBBER करता है) | ||
| VALUE | आवंटित बफ़र में डेटा लिखें | हाँ — लेकिन अब $1 कहीं और इंगित करता है |
map $http_user_agent $is_bot {
~*(bot|crawl|spider) 1; # ← regex map = clobber trigger
default 0;
}
location ~ "^/api/v1/(.+)$" { # ← regex capture source
proxy_set_header X-Route "$1 — $is_bot"; # ← two-pass sink
# ^^ ^^^^^^^
# capture ref + map var in same buffer = BUG
}
| दिशा | URI आकार | Map इनपुट आकार | परिणाम |
|---|---|---|---|
| Overflow | छोटा (3 B) | लंबा (4096 B) | LEN छोटा आवंटित करता है, VALUE बड़ा लिखता है → heap overflow |
| Info Leak | लंबा (8000 B) | छोटा (5 B) | LEN बड़ा आवंटित करता है, VALUE छोटा लिखता है → प्रतिक्रिया में heap residue |
| एंडपॉइंट | सिंक | Map ट्रिगर | डेमो |
|---|---|---|---|
/api/v1/{path} | proxy_set_header | $is_bot (User-Agent) | Overflow |
/leak/{path} | return + add_header | $ref_domain (Referer) | Info leak |
/rce/{path} | set + return | $is_bot (User-Agent) | Overflow |
/safe/{path} | return (no map) | None | Control (safe) |
| फ़ाइल | उद्देश्य |
|---|---|
docker-compose.yml | लैब ऑर्केस्ट्रेशन |
Dockerfile.nginx-vuln | भेद्य nginx 1.26.x |
Dockerfile.nginx-patched | पैच किया गया nginx 1.30.4 |
nginx-vuln.conf | एनोटेटेड पैटर्न के साथ भेद्य कॉन्फ़िगरेशन |
backend.py | प्रॉक्सी किए गए हेडर का निरीक्षण करने के लिए Echo सर्वर |
poc_overflow.py | Heap overflow PoC (बढ़ते पेलोड आकार) |
poc_infoleak.py | Info leak PoC (heap residue डिटेक्शन) |
poc_curl.sh | त्वरित curl-आधारित परीक्षण |
config scanner का उपयोग करें:
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf
map में ~ / ~* regex पैटर्न से बचेंकेवल शैक्षिक और अधिकृत सुरक्षा परीक्षण के लिए।