
यह CVE-2023-27372 के लिए एक PoC है और एक पूर्णतः इंटरैक्टिव शेल स्पॉन करता है।
यह एक डिसीरियलाइज़ेशन दोष है जो पासवर्ड रीसेट सुविधा (spip.php?page=spip_pass) के दौरान #ENV टैग के खतरनाक उपयोग का फायदा उठाता है, जो /ecrire/balise/formulaire_.php के भीतर है। विशेष रूप से यह लाइन:
function protege_champ($texte){
if (is_array($texte))
$texte = array_map('protege_champ',$texte);
else {
// ne pas corrompre une valeur serialize
if (preg_match(",^[abis]:\d+[:;],", $texte) AND unserialize($texte)!=false)
return $texte;
$texte = entites_html($texte);
$texte = str_replace("'","'",$texte);
}
return $texte;
}
protege_champ फ़ंक्शन विभिन्न दोषों से ग्रस्त है। इनपुट को मान्य करने के लिए उपयोग किया जाने वाला रेगुलर एक्सप्रेशन (RE) चेक त्रुटिपूर्ण है और इसे आसानी से बायपास किया जा सकता है। कोड बिना उचित सत्यापन के unserialize() फ़ंक्शन को कॉल करता है, जिससे मनमाना कोड का निष्पादन संभव हो जाता है। मैन्युअल शोषण अत्यंत आसानी से किया जा सकता है। उदाहरण के लिए, यदि हम निष्पादित करना चाहते हैं, तो हम यह कर सकते हैं:
phpinfo();oubli=s:19:"<?phpinfo(); ?>";
यदि सर्वर अपेक्षित आउटपुट लौटाता है, तो यह भेद्य है। हम इसे कैसे पैच करें? वास्तव में काफी सरलता से। नीचे, मैंने एक बुनियादी पैच लिखा है:
function protege_champ($texte) {
if (is_array($texte)) {
$texte = array_map('protege_champ', $texte);
} else {
if (!isValidInput($texte)) {
$texte = 'Malicious input detected';
} else {
$texte = entites_html($texte);
$texte = str_replace("'", "'", $texte);
}
}
return $texte;
}
पैच किया गया protege_champ() फ़ंक्शन इनपुट सत्यापन, सैनिटाइज़ेशन और दुर्भावनापूर्ण इनपुट की हैंडलिंग शामिल करता है।