
CVE-2025-22131 के लिए PoC
CVE-2025-22131 के लिए PoC
PhpSpreadsheet एक शुद्ध PHP में लिखी गई लाइब्रेरी है और यह क्लासेज का एक सेट प्रदान करती है जो आपको एक्सेल और लिबरऑफिस कैल्क जैसे विभिन्न स्प्रेडशीट फ़ाइल फ़ॉर्मेट को पढ़ने और लिखने की अनुमति देती है।
phpspreadsheet संस्करण <1.29.8>=2.2.0, <2.3.6>=2.0.0, <2.1.7>=3.0.0, <3.8.0 एक कमज़ोरी से प्रभावित है जहां शीट के नाम ठीक से सैनिटाइज़ नहीं किए जाते हैं जिससे XSS उत्पन्न होता है।
1 शीट से अधिक वाली एक साधारण xlsx फ़ाइल बनाएं और उसे सहेजें।
फ़ाइल को अनज़िप करें, शीट का नाम मैन्युअल रूप से XSS पेलोड में अपडेट करें
फ़ाइल को फिर से ज़िप करें
xlsx फ़ाइल को कमज़ोर सर्वर पर अपलोड करें
दिए गए URL पर पीड़ित के कुकी को बाहर निकालें
नोट: मैंने पीड़ित के कुकी को बाहर निकालने के लिए पेलोड का उपयोग किया है, यदि कुछ और चाहिए, तो xl/workbook.xml फ़ाइल को तदनुसार अपडेट करें।
/**
* Generate sheet tabs.
*/
public function generateNavigation(): string
{
// Fetch sheets
$sheets = [];
if ($this->sheetIndex === null) {
$sheets = $this->spreadsheet->getAllSheets();
} else {
$sheets[] = $this->spreadsheet->getSheet($this->sheetIndex);
}
// Construct HTML
$html = '';
// Only if there are more than 1 sheets
if (count($sheets) > 1) {
// Loop all sheets
$sheetId = 0;
$html .= '<ul class="navigation">' . PHP_EOL;
foreach ($sheets as $sheet) {
$html .= ' <li class="sheet' . $sheetId . '"><a href="#sheet' . $sheetId . '">' . $sheet->getTitle() . '</a></li>' . PHP_EOL;
++$sheetId;
}
$html .= '</ul>' . PHP_EOL;
}
return $html;
}
यहाँ $sheet->getTitle() को htmlspecialchars() का उपयोग करके ठीक से एस्केप नहीं किया गया है, जिसके कारण एक हमलावर HTML इंजेक्ट कर सकता है।
ध्यान दें कि कोड का यह टुकड़ा केवल तभी चलता है जब 1 से अधिक शीट हों, इसलिए 1 से अधिक शीट वाली xlsx फ़ाइल होना आवश्यक है।
PoC में, एक इमेज टैग का उपयोग किया जाता है ताकि पीड़ित के कुकी को हमलावर के URL पर बाहर निकाला जा सके।