
CVE-2024–27632 संदर्भ
Savane v3.12 और पूर्व संस्करणों में, क्रॉस-साइट रिक्वेस्ट फोर्जरी (CSRF) सुरक्षा टोकन (form_id) उत्पन्न करने के लिए उपयोग किए जाने वाले छद्म-यादृच्छिक संख्या जनरेटर (PRNG) में बीज के रूप में Unix टाइमस्टैम्प का उपयोग किया जाता है। परिणामस्वरूप, एक हमलावर उसी वैध CSRF टोकन को स्वतंत्र रूप से उत्पन्न करने में सक्षम हो सकता है जो एक पीड़ित उपयोगकर्ता को निर्दिष्ट किया गया था, जिससे CSRF जाँच पारित हो सकती है और एक सफल CSRF हमला हो सकता है। CSRF हमले के प्रभाव में विशेषाधिकार वृद्धि और खाता अधिग्रहण शामिल है।
CWE वर्गीकरण: CWE-335: छद्म-यादृच्छिक संख्या जनरेटर (PRNG) में बीजों का गलत उपयोग
रिपोर्टकर्ता: Ally Petitt
प्रभावित उत्पाद: Savane
प्रभावित संस्करण: 3.12 और पूर्व
form_id उत्पन्न होने से पहले, utils_srand() को कॉल किया जाता है। फिर, उत्पन्न form_id PHP के PRNG द्वारा उत्पन्न एक मान के MD5 हैश के रूप में बनाया जाता है।
frontend/php/include/form.php:61
if (!$form_id)
{
utils_srand ();
$form_id = md5 (mt_rand (0, 1000000));
}
जैसा कि नीचे कोड ब्लॉक में दिखाया गया है, utils_srand() एक फ़ंक्शन के रूप में परिभाषित किया गया है जो microtime() को सीड करता है, एक फ़ंक्शन जो Unix टाइमस्टैम्प को 1,000,000 से गुणा करके लौटाता है।
frontend/php/include/utils.php:969
function utils_srand ()
{
mt_srand ((int)((double)microtime () * 1000000));
}
परिणामस्वरूप, Unix टाइमस्टैम्प, एक पूर्वानुमानित मान, का उपयोग एक सुरक्षा-महत्वपूर्ण छद्म-यादृच्छिक संख्या उत्पन्न करने के लिए किया जाता है। उपयोगकर्ता का टोकन कब बनाया गया था, इस समय का अनुमान हमलावर द्वारा लगाया जा सकता है या ट्रिगर किया जा सकता है ताकि एक वैध टाइमस्टैम्प प्राप्त किया जा सके जिसका उपयोग वे एक वैध CSRF टोकन बनाने के लिए कर सकते हैं।
ये चरण यह प्रदर्शित करने का लक्ष्य रखते हैं कि टाइमस्टैम्प जानना स्वतंत्र रूप से एक वैध टोकन उत्पन्न करने के लिए पर्याप्त है। वास्तविक दुनिया की हमला रणनीतियों में टोकन निर्माण के सही टाइमस्टैम्प का अनुमान लगाने के लिए अतिरिक्त रचनात्मकता शामिल हो सकती है।
form_id उत्पन्न करता है।$RECORDED_UNIX_TIME को रिकॉर्ड किए गए समय से बदलें और निम्न PHP स्क्रिप्ट चलाएँ। ध्यान दें कि उत्पन्न मान form_id से मेल खाता है जो सर्वर ने शुरू में वेबपेज पर जाने पर लौटाया था।<?php
mt_srand ((int)((double)$RECORDED_UNIX_TIME* 1000000));
echo md5 (mt_rand (0, 1000000));
?>
Savane संस्करण 3.13 या उच्चतर पर अपग्रेड करें। पैच यहाँ पाया जा सकता है।