TRAN CONG DANH - SVTT - मार्गदर्शक: LUU VAN LAN - CVE-2018-7600 - आरंभ दिन: 26/06/2024.
विषय सूची:
- CVE summary
- Prerequisites
- CVE Analyse
- Mitigation
CVE सारांश
- एक हमलावर Drupal Form API Ajax Request को कॉल कर सकता है जिसमें call_user_func auto do function शामिल हो।
- Drupal before 7.58, 8.x before 8.3.9, 8.4.x before 8.4.6, and 8.5.x before 8.5.1
पूर्वापेक्षाएँ
CVE विश्लेषण
- हम उन कुंजियों को ढूंढते हैं जो call_user_func का उपयोग करती हैं, वे हैं #pre_render, #post_render, #access_callback, #submit, #lazy_builder, #validate

- अब कार्य यह है कि उपयोगकर्ता द्वारा सबमिट किए गए किस पैरामीटर में एक render है, कुंजी को बदल सकता है, और #post_render कुंजी प्राप्त कर सकता है, उसे कॉल करने के लिए।

- चित्र का आकार बदलते समय सर्वर drupal API को कॉल करता है

- यहां शामिल &$array फ़ंक्शन भेजे जाने पर डिफ़ॉल्ट तत्वों की सरणी है, आइए बिना कोड के डिबगिंग करने का प्रयास करें:

- मान लीजिए आप अपलोड करते समय mail का मान संशोधित करते हैं:


- getValue($array, $parents) विधि को कॉल करते समय, प्रक्रिया इस प्रकार है:
$ref $array के संदर्भों को प्रतिबंधित करता है।
पहला लूप: $ref $array['a'] के लिए संदर्भित होता है।
दूसरा लूप: $ref $array['a']['b'] के लिए संदर्भित होता है।
तीसरा लूप: $ref $array['a']['b']['c'] के लिए संदर्भित होता है।
अंतिम परिणाम, $ref मान 42 के लिए संदर्भित होगा।
$array = [
'a' => [
'b' => [
'c' => 42
]
]
];
$parents = ['a', 'b', 'c'];
- func getValue से $form मान प्राप्त करने के बाद, $form Render फंक्शन के लिए एक तर्क बन जाएगा।

- call_user_func की परिभाषा

- जब मैं फ़ाइल एक्सप्लॉइट का उपयोग करता हूं तो परिणाम:

शमन
- पैच
** Drupal डेवलपर्स ने एक पैच प्रकाशित किया है, जिसमें एक RequestSanitizer क्लास जोड़ा गया है जिसमें stripDangerousValues विधि है जो सरणी के उन सभी इनपुट तत्वों को हटा देती है जिनकी कुंजियाँ “#” से शुरू होती हैं। यह विधि $_GET, $_POST, और $_COOKIES में इनपुट को साफ करती है।
** Drupal 8.6.5
/core/lib/Drupal/Core/DrupalKernel.php
/core/lib/Drupal/Core/Security/RequestSanitizer.php
** stripDangerousValues फ़ंक्शन सभी इनपुट पैरामीटरों की एक-एक करके जांच करता है, इनपुट सरणी के पहले तत्वों का मान “#” से शुरू होता है और जो मान श्वेतसूची में नहीं हैं उन्हें हटा दिया जाता है।