
CVE-2020-25867 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट जो PHP type juggling के माध्यम से SoPlanning कैलेंडर शेयरिंग कुंजी प्रमाणीकरण को बाईपास करता है।
शेयरिंग कुंजी प्रणाली PHP टाइप जगलिंग हमले के प्रति संवेदनशील है, जो हमलावर को शेयरिंग कुंजी जाने बिना कैलेंडर की सामग्री तक पहुंचने की अनुमति देता है।
असुरक्षित होने के लिए, कैलेंडर शेयरिंग कुंजी सक्षम होनी चाहिए।

एक बार यह शेयरिंग सक्षम हो जाने पर, उपयोगकर्ता शेयरिंग कुंजी का उपयोग करके प्रमाणीकरण के बिना कैलेंडर तक पहुंच सकता है।

बेशक, अगर कुंजी गलत है, तो पहुँच अस्वीकार कर दी जाती है।
कुंजी सत्यापन फ़ाइल "includes/header.inc" में है
if ( CONFIG_SOPLANNING_OPTION_ACCES == 2 && isset($_GET['public']) && isset($_GET['cle']))
{
if (strcmp($_GET['cle'],CONFIG_SECURE_KEY)==0)
{
$_SESSION['public']=1;
$_SESSION['user_id']='publicspl';
}
}
strcmp फ़ंक्शन का उपयोग गैर-सख्त तुलना के साथ किया जाता है। इस तुलना का परिणाम निम्नलिखित पर निर्भर करता है : PHP प्रकार तुलना तालिकाएँ
strcmp फ़ंक्शन का परिणाम दस्तावेज़ीकरण में वर्णित है : strcmp
यदि str1, str2 से छोटा है तो < 0 लौटाता है; यदि str1, str2 से बड़ा है तो > 0, और यदि वे समान हैं तो 0 लौटाता है।
यह फ़ंक्शन "NULL" लौटाता है यदि पैरामीटर में से एक सरणी है।
PHP प्रकार तुलना तालिकाओं के अनुसार, "NULL" और 0 के बीच गैर-सख्त तुलना सत्य है
इस प्रकार, यदि $_GET['cle'] एक सरणी है, तो शर्त का परिणाम सत्य है और पहुँच अधिकृत है।
यह लिंक $_GET['cle'] को एक सरणी के रूप में परिभाषित करेगा : https://demo.soplanning.org/planning.php?public=1&cle[]=

पहुँच "Invité" के रूप में प्रदान की गई है
इस भेद्यता को ठीक करने के लिए, एक सख्त तुलना का उपयोग किया जा सकता है:
if ( CONFIG_SOPLANNING_OPTION_ACCES == 2 && isset($_GET['public']) && isset($_GET['cle']))
{
if (strcmp($_GET['cle'],CONFIG_SECURE_KEY)===0)
{
$_SESSION['public']=1;
$_SESSION['user_id']='publicspl';
}
}
या तुलना strcmp फ़ंक्शन के बिना भी की जा सकती है।
if ( CONFIG_SOPLANNING_OPTION_ACCES == 2 && isset($_GET['public']) && isset($_GET['cle']))
{
if ($_GET['cle'] === CONFIG_SECURE_KEY)
{
$_SESSION['public']=1;
$_SESSION['user_id']='publicspl';
}
}