
Docker-आधारित प्रयोगशाला वातावरण, जो nginx-ui में दो अप्रमाणित API कमजोरियों (CVE-2026-42221, CVE-2026-42238) को सत्यापित करने और शोषण करने के लिए है, जिसमें पैच किए गए संस्करण की तुलना और शैक्षिक लेख शामिल है।
nginx-ui (Nginx का वेब GUI प्रबंधन उपकरण) में रिपोर्ट किए गए दो CVE को Docker वातावरण में वास्तविक रूप से सत्यापित करने के लिए यह रिपॉजिटरी है।
अस्वीकरण
इस रिपॉजिटरी की सत्यापन सामग्री केवल उस पृथक स्थानीय वातावरण के लिए है जिसे मैं स्वयं प्रबंधित करता हूँ।
बिना अनुमति के तीसरे पक्ष के सिस्टम पर समान विधियों का उपयोग करना अनधिकृत पहुँच निषेध कानून का उल्लंघन है।
सत्यापन की प्रक्रिया, विचार और सीखी गई बातें Qiita लेख में संकलित की गई हैं।
nginx-ui के CVE को वास्तव में आज़माया: "कमजोरी" सोचा तो वह डिज़ाइन की बात निकली
| CVE | सारांश | प्रभावित संस्करण | सुधारित संस्करण |
|---|
| CVE-2026-42221 | सेटअप से पहले /api/install प्रमाणीकरण के बिना सुलभ। हमलावर पहले व्यवस्थापक खाता पंजीकृत कर सकता है | v2.3.7 और पहले | v2.3.8 |
| CVE-2026-42238 | सेटअप से पहले /api/restore प्रमाणीकरण के बिना सुलभ। दुर्भावनापूर्ण app.ini इंजेक्ट करके root के रूप में मनमाना कमांड निष्पादित कर सकता है | v2.3.7 और पहले | v2.3.8 |
दोनों CVE का मूल कारण एक ही है (सेटअप से पहले API खिड़की असुरक्षित है), और v2.3.8 में इंस्टॉलेशन सीक्रेट विधि शुरू करके एक मिडलवेयर जोड़ने से दोनों को ठीक कर दिया गया।
.
├── nginx_lab/ # कमजोर संस्करण (v2.3.7) का सत्यापन वातावरण → पोर्ट 8080
│ ├── Dockerfile # स्टार्टअप लूप से बचने के लिए प्रारंभिक सेटिंग्स सहित इमेज परिभाषा
│ ├── docker-compose.yml
│ ├── nginx.conf # sites-enabled / stream ब्लॉक संशोधित कॉन्फ़िगरेशन
│ ├── init-app.ini # app.ini का प्रारंभिक टेम्पलेट
│ └── entrypoint.sh # कंटेनर स्टार्टअप पर प्रारंभिक स्क्रिप्ट
├── nginx_lab_patched/ # सुधारित संस्करण (v2.3.8) का सत्यापन वातावरण → पोर्ट 8081
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── nginx.conf
│ ├── init-app.ini
│ └── entrypoint.sh
├── scripts/
│ ├── exploit_42221.py # CVE-2026-42221 के लिए हमला स्क्रिप्ट
│ ├── encrypt_password.py # RSA एन्क्रिप्शन उपयोगिता
│ └── test_patched.py # v2.3.8 (पोर्ट 8081) पर पैच लागू होने की पुष्टि करने वाली स्क्रिप्ट
├── Qiita.md # Qiita पोस्ट पांडुलिपि
└── 学習プラン.md
pycryptodome लाइब्रेरीpip install pycryptodome
cd nginx_lab
docker compose build
docker compose up -d
प्रारंभ की पुष्टि करें:
curl http://localhost:8080/api/install
# → {"lock":false,"timeout":false} वापस आए तो ठीक है
अड़चन बिंदु: सादा
uozi/nginx-ui:v2.3.7इमेज वैसे ही स्टार्टअप लूप में चली जाती है। क्योंकिsites-enabledआदि निर्देशिकाएँ मौजूद नहीं हैं। इस रिपॉजिटरी के Dockerfile में इन्हें पहले से तैयार किया गया है।
cd scripts
python exploit_42221.py
सफल होने पर attacker खाते से http://localhost:8080 पर लॉगिन किया जा सकता है।
cd nginx_lab_patched
docker compose build
docker compose up -d
v2.3.8 में पहले सेटअप के लिए इंस्टॉलेशन सीक्रेट आवश्यक है। कंटेनर प्रारंभ होने के बाद सीक्रेट देखें।
docker exec nginx-ui-patched cat /etc/nginx-ui/.install_secret
सेटअप स्क्रीन http://localhost:8081 पर इस मान का उपयोग करके व्यवस्थापक पंजीकृत करें।
cd scripts
python test_patched.py
[OK] 攻撃失敗(修正済み) आउटपुट होने पर पैच सही ढंग से काम कर रहा है।
# कमजोर संस्करण
cd nginx_lab
docker compose down -v
# सुधारित संस्करण
cd nginx_lab_patched
docker compose down -v