
CVE-2019-6340 के लिए Python एक्सप्लॉइट जो Drupal 8 RESTful API को लक्षित करता है, क्राफ्टेड HTTP अनुरोधों के माध्यम से रिमोट कोड एक्सिक्यूशन प्राप्त करने के लिए। इसमें Docker सेटअप और कमांड इंजेक्शन पेलोड शामिल है।
CVE 2019-6340
Drupal 8 कोर RESTful API सेवा मॉड्यूल सक्षम होने पर साइट उपयोगकर्ता को सर्वर पर GET, PATCH या POST अनुरोध भेजने की अनुमति देती है।
(GET अनुरोध भी कोड निष्पादन भेद्यता को ट्रिगर करने के लिए पर्याप्त है, भले ही PATCH विधि अक्षम हो)
साइट पर Drupal 8 में JSON-API या Drupal 7 में REST सेवाओं जैसा कोई अन्य वेब सेवा मॉड्यूल सक्षम है।
POC के लिए आवश्यकताएँ
DOCKER.IO
DRUPAL 8.6.9
SQL 5.7
docker run -d --name mysqldb -e MYSQL_ROOT_PASSWORD=password mysql:5.7
docker run -d --name drupal --link mysqldb -p 8090:80 -e MY_SQL_USER:root -e MY_SQL_PASSWORD:password drupal:8.6.9
exp कमांड चलाएं
python3 exp.py http://Ip_of_drupal_container:port_assigned(if)// "command_to_execuite"
उदाहरण:- python3 exp.py http://127.0.0.1:8090/ "hostname -I"
EXP विश्लेषण
Guzzle एक PHP HTTP क्लाइंट है जो HTTP अनुरोध भेजना आसान बनाता है और वेब सेवाओं के साथ एकीकरण को सरल बनाता है। इसका उपयोग Drupal-आधारित वेबसाइटों पर दुर्भावनापूर्ण अनुरोध भेजने के लिए एक शोषण के रूप में किया जाता है। यदि हम शोषण कोड (exp.py) के अंदर Guzzle स्क्रिप्ट का विश्लेषण करते हैं, तो हम पा सकते हैं कि एक "command" स्ट्रिंग को उस कमांड से बदल दिया जाता है जिसे हम रनटाइम पर पास करते हैं (जैसे hostname -I)

जब हम exp कमांड चलाते हैं तो यह पहले एक मौजूदा नोड की तलाश करेगा, इसलिए हमें अपनी वेबसाइट पर कुछ नोड बनाने होंगे। मूल रूप से आपको वेबसाइट पर कुछ सामग्री जोड़नी होगी

यह किसी भी नोड को दो बार एक्सेस नहीं करेगा। मान लीजिए आपने 5 नोड जोड़े हैं, तो अपने शोषण को 5 बार चलाने के बाद आपको अपने नोड्स को अपडेट करना होगा बस कंटेंट पर जाएं और नोड्स पर कोई भी कार्रवाई लागू करें
अनुरोध और प्रतिक्रिया

