
CVE-2026-42926 पैच सत्यापन और रक्षात्मक अनुसंधान के लिए नियंत्रित NGINX HTTP/2 फ्रेम इंजेक्शन लैब
एक नियंत्रित साइबर सुरक्षा लैब जो CVE-2026-42926 से संबंधित व्यवहार को मान्य और तुलना करने के लिए है, जो कि एक HTTP/2 फ्रेम इंजेक्शन समस्या है जो विशिष्ट NGINX संस्करणों को प्रभावित करती है जब एक कमजोर प्रॉक्सी कॉन्फ़िगरेशन का उपयोग किया जाता है।
यह रिपॉजिटरी केवल रक्षात्मक अनुसंधान, पैच सत्यापन, कॉन्फ़िगरेशन ऑडिटिंग और नियंत्रित लैब पुनरुत्पादन के लिए अभिप्रेत है।
वर्गीकरण: HTTP/2 फ्रेम इंजेक्शन प्रभावित संस्करण: NGINX
1.29.4से1.30.0स्थिर संस्करण: NGINX1.30.1+/1.31.0+
इस प्रोजेक्ट का उपयोग केवल एक पृथक लैब वातावरण में करें जो आपके स्वामित्व में है या जिसके परीक्षण के लिए आपको स्पष्ट रूप से अधिकृत किया गया है।
इसे तीसरे पक्ष के सिस्टम, सार्वजनिक बुनियादी ढांचे, साझा वातावरण या उत्पादन सेवाओं के विरुद्ध लिखित प्राधिकरण के बिना न चलाएं।
अनुशंसित अलगाव:
लैब जांचता है कि क्या लक्ष्य NGINX बाइनरी और कॉन्फ़िगरेशन समस्या को पुन: उत्पन्न करने के लिए आवश्यक शर्तों से मेल खाते हैं, परीक्षण स्थान पर एक क्राफ्टेड अनुरोध भेजता है, और एक नियंत्रित अपस्ट्रीम लॉगर की जांच करता है कि क्या इंजेक्ट किए गए HTTP/2 फ्रेम-जैसे बाइट्स अपस्ट्रीम तक पहुंचे हैं।
सामान्य सत्यापन पैटर्न है:
अपेक्षित परिणाम:
bashpython3phpकंटेनरीकृत वर्कफ़्लो के लिए:
नमूना कॉन्फ़िगरेशन पोर्ट 80 पर सुनता है, जिसके लिए आमतौर पर रूट विशेषाधिकारों की आवश्यकता होती है। एक अनप्रिविलेज्ड स्थानीय लैब के लिए, nginx_vulnerable.conf में listen 80; को उपलब्ध उच्च पोर्ट जैसे 8080 में बदलें, फिर PHP कमांड में मिलान करने वाले लक्ष्य URL का उपयोग करें।
शेल स्क्रिप्ट को निष्पादन योग्य बनाएं:
chmod +x nginx_config_verify.sh run_lab_comparison.sh
पुष्टि करें कि PHP में cURL सपोर्ट है:
php -m | grep -i curl
पुष्टि करें कि प्रत्येक NGINX बाइनरी अपना संस्करण प्रिंट कर सकता है:
/path/to/nginx -V
प्रदान किया गया nginx_vulnerable.conf में आवश्यक परीक्षण पैटर्न शामिल है:
location /exploit {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 2;
proxy_set_body $request_body;
proxy_set_header Host $host;
proxy_set_header Content-Length $content_length;
}
महत्वपूर्ण विवरण:
proxy_http_version 2 अपस्ट्रीम लॉगर के लिए HTTP/2 प्रॉक्सीिंग सक्षम करता है।proxy_set_body $request_body क्लाइंट-नियंत्रित अनुरोध बॉडी का उपयोग करता है।client_max_body_size 20m सत्यापन स्क्रिप्ट द्वारा उपयोग किए गए क्राफ्टेड 16 MiB अनुरोध बॉडी की अनुमति देता है।127.0.0.1:8081 पर सुनता है।docker/nginx_vulnerable.docker.conf में Docker-विशिष्ट कॉन्फ़िगरेशन उसी कमजोर प्रॉक्सी पैटर्न को बनाए रखता है लेकिन कंटेनर पोर्ट 8080 पर सुनता है और Compose सेवा नाम upstream:8081 पर प्रॉक्सी करता है।
Dockerfile NGINX 1.29.4 को स्रोत से बनाता है और लैब के लिए आवश्यक PHP/Python टूलिंग स्थापित करता है। Compose तब एक ही इमेज से तीन सेवाएं चलाता है:
upstream: रॉ HTTP/2 फ्रेम लॉगरnginx: कमजोर NGINX 1.29.4 जो docker/nginx_vulnerable.docker.conf का उपयोग करता हैrunner: एक-शॉट PHP सत्यापन कमांडलैब इमेज बनाएं:
docker compose build
अपस्ट्रीम लॉगर और कमजोर NGINX शुरू करें:
docker compose up -d upstream nginx
बंडल किए गए NGINX संस्करण की पुष्टि करें:
docker compose exec nginx nginx -V
Compose नेटवर्क के अंदर सत्यापन स्क्रिप्ट चलाएं:
docker compose --profile run run --rm runner
रनर इन-कंटेनर तर्कों का उपयोग करता है:
php /lab/cve_2026_42926_lab.php \
http://nginx:8080/exploit \
/lab/upstream_logs \
/lab/nginx_config_verify.sh \
/usr/local/nginx/sbin/nginx \
/lab/docker/nginx_vulnerable.docker.conf \
/exploit
जनरेटेड अपस्ट्रीम लॉग होस्ट निर्देशिका में लिखे जाते हैं:
./upstream_logs/
NGINX सेवा होस्ट पर भी उपलब्ध है:
http://localhost:8080/version
लैब कंटेनरों को रोकें और हटाएं:
docker compose down
नियंत्रित अपस्ट्रीम लॉगर शुरू करें:
python3 upstream_frame_logger.py 8081 ./upstream_logs
दूसरे टर्मिनल में, नमूना कॉन्फ़िगरेशन के साथ NGINX शुरू करें:
/path/to/nginx -c "$PWD/nginx_vulnerable.conf"
सत्यापन स्क्रिप्ट चलाएं:
php cve_2026_42926_lab.php \
http://localhost/exploit \
./upstream_logs \
./nginx_config_verify.sh \
/path/to/nginx \
"$PWD/nginx_vulnerable.conf" \
/exploit
रन के बाद NGINX रोकें:
/path/to/nginx -s stop
यदि आपने NGINX को किसी अन्य पोर्ट पर सुनने के लिए बदला है, तो पहले तर्क को अपडेट करें। उदाहरण के लिए:
php cve_2026_42926_lab.php http://localhost:8080/exploit ./upstream_logs ./nginx_config_verify.sh /path/to/nginx "$PWD/nginx_vulnerable.conf" /exploit
दो NGINX बाइनरीज़ के पथ सेट करें और तुलना हार्नेस चलाएं:
VULNERABLE_NGINX=/usr/local/nginx_1.29.4/sbin/nginx \
PATCHED_NGINX=/usr/local/nginx_1.30.1/sbin/nginx \
bash run_lab_comparison.sh
वैकल्पिक कॉन्फ़िगरेशन ओवरराइड:
VULNERABLE_NGINX=/path/to/vulnerable/nginx \
PATCHED_NGINX=/path/to/patched/nginx \
VULNERABLE_CONFIG="$PWD/nginx_vulnerable.conf" \
PATCHED_CONFIG="$PWD/nginx_vulnerable.conf" \
bash run_lab_comparison.sh
तुलना स्क्रिप्ट लिखती है:
vulnerable_result.txtpatched_result.txtupstream_logs_vulnerable/upstream_logs_patched/nginx_config_verify.sh का सीधे उपयोग करें जब आप केवल यह जांचना चाहते हैं कि कॉन्फ़िगरेशन में कमजोर पैटर्न है या नहीं:
./nginx_config_verify.sh /path/to/nginx "$PWD/nginx_vulnerable.conf" /exploit
सहायक जाँच करता है:
proxy_http_version 2proxy_set_bodyclient_max_body_sizecve_2026_42926_lab.php स्थितीय तर्क स्वीकार करता है:
php cve_2026_42926_lab.php <target_url> <upstream_log_dir> <config_script> <nginx_binary> <nginx_config> <location> [version_url]
डिफ़ॉल्ट:
cve_2026_42926_lab.php तीन निर्णयों में से एक लौटाता है:
सकारात्मक साक्ष्य के लिए आवश्यक है कि स्क्रिप्ट रन मार्कर, देखे गए अपस्ट्रीम फ्रेम हेडर, इंजेक्टेड-फ्रेम फ्लैग और प्रभावित NGINX संस्करण को सहसंबंधित करे।
अपस्ट्रीम लॉगर JSON फ़ाइलें लिखता है जिनका नाम इस प्रकार है:
frames_<timestamp>.json
प्रत्येक लॉग में पार्स किए गए HTTP/2 फ्रेम मेटाडेटा, पेलोड अंश, बाइट ऑफ़सेट, इंजेक्शन डिटेक्शन फ्लैग और रन-सहसंबंध फ़ील्ड होते हैं।
तुलना हार्नेस कमजोर और पैच किए गए रनों के लिए अलग-अलग लॉग निर्देशिकाएं संग्रहीत करता है ताकि दो निष्पादनों के साक्ष्य मिश्रित न हों।
यदि PHP स्क्रिप्ट रिपोर्ट करती है कि कॉन्फ़िगरेशन सहायक निष्पादन योग्य नहीं है, तो चलाएं:
chmod +x nginx_config_verify.sh
यदि अनुरोध 413 Request Entity Too Large लौटाता है, तो client_max_body_size को कम से कम 16m तक बढ़ाएं; नमूना कॉन्फ़िगरेशन 20m का उपयोग करता है।
यदि कोई अपस्ट्रीम लॉग नहीं बनाया गया है, तो जांचें कि:
upstream_frame_logger.py चल रहा है।127.0.0.1:8081 पर प्रॉक्सी कर रहा है।/exploit स्थान तक पहुंचा।यदि NGINX पोर्ट 80 को बाइंड करने में विफल रहता है, तो या तो इसे लैब वातावरण में उपयुक्त विशेषाधिकारों के साथ चलाएं या कॉन्फ़िगरेशन को उच्च पोर्ट जैसे 8080 में बदलें।
यदि तुलना परिणाम अनिर्णायक है, तो विफल पूर्व शर्त के लिए vulnerable_result.txt, patched_result.txt, और संबंधित अपस्ट्रीम लॉग निर्देशिकाओं का निरीक्षण करें।
यह प्रोजेक्ट MIT लाइसेंस के अंतर्गत लाइसेंस प्राप्त है। विवरण के लिए LICENSE देखें।
| फ़ाइल | विवरण |
|---|
README.md | परियोजना दस्तावेज़ीकरण। |
LICENSE | MIT लाइसेंस। |
Dockerfile | NGINX 1.29.4, PHP CLI/cURL, Python, और प्रोजेक्ट स्क्रिप्ट के साथ एक स्व-निहित लैब इमेज बनाता है। |
docker-compose.yml | कमजोर NGINX सेवा, अपस्ट्रीम फ्रेम लॉगर, और एक वैकल्पिक सत्यापन रनर शुरू करता है। |
cve_2026_42926_lab.php | मुख्य लैब सत्यापन स्क्रिप्ट। यह संस्करण/कॉन्फ़िगरेशन पूर्व शर्तों की जांच करता है, क्राफ्टेड अनुरोध भेजता है, अपस्ट्रीम लॉग का निरीक्षण करता है, और एक निर्णय देता है। |
nginx_vulnerable.conf | नमूना NGINX कॉन्फ़िगरेशन जिसमें कमजोर प्रॉक्सीिंग पैटर्न है, जिसका उपयोग कमजोर और पैच दोनों तुलनात्मक रनों के लिए किया जाता है। |
docker/nginx_vulnerable.docker.conf | Docker-विशिष्ट NGINX कॉन्फ़िगरेशन जो उसी कमजोर पैटर्न और Compose सेवा डिस्कवरी का उपयोग करता है। |
nginx_config_verify.sh | सहायक जो सत्यापित करता है कि लक्ष्य NGINX कॉन्फ़िगरेशन में आवश्यक कमजोर प्रॉक्सी पैटर्न है या नहीं। |
upstream_frame_logger.py | नियंत्रित रॉ HTTP/2 अपस्ट्रीम लॉगर जो NGINX से प्राप्त फ्रेमों को कैप्चर और निरीक्षण करने के लिए उपयोग किया जाता है। |
run_lab_comparison.sh | कमजोर-बनाम-पैच तुलनात्मक रनों का आयोजन करता है। |
.dockerignore | जनरेटेड लॉग और IDE मेटाडेटा को Docker बिल्ड कॉन्टेक्स्ट से बाहर रखता है। |
| तर्क | डिफ़ॉल्ट |
|---|
target_url | http://localhost/exploit |
upstream_log_dir | ./upstream_logs |
config_script | ./nginx_config_verify.sh |
nginx_binary | nginx |
nginx_config | /etc/nginx/nginx.conf |
location | /exploit |
version_url | http://localhost/version |
| निर्णय | अर्थ | निकास कोड |
|---|
positive | फ्रेम इंजेक्शन साक्ष्य देखा गया और रन से संबंधित था। | 0 |
negative | पूर्व शर्तें पूरी हुईं और कोई इंजेक्शन साक्ष्य नहीं देखा गया। | 1 |
inconclusive | एक या अधिक पूर्व शर्तें या साक्ष्य जांच विफल रहीं। | 2 |