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`** – एक निष्पादन त्रुटि लौटाएं
3. **bootstrap.py** एक लूप में init प्रक्रिया से invocations प्राप्त करता है और उन्हें संभालने के लिए उपयोगकर्ता के कोड को कॉल करता है (**`/next`**).
4. अंततः, **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**](https://docs.python.org/3/library/inspect.html) पायथन मॉड्यूल का उपयोग करके प्राप्त किया जा सकता है (जैसा कि [यहां प्रस्तावित है](https://github.com/twistlock/lambda-persistency-poc/blob/master/poc/switch_runtime.py)) या बस इसे फिर से **`/2018-06-01/runtime/invocation/next`** पर अनुरोध करके प्राप्त किया जा सकता है (जैसा कि [यहां प्रस्तावित है](https://github.com/Djkusik/serverless_persistency_poc/blob/master/gcp/exploit_files/switcher.py)).
- अगली invocations को संभालने के लिए एक दुर्भावनापूर्ण **`boostrap.py`** निष्पादित करें
- छिपे रहने के उद्देश्यों के लिए, हमलावर द्वारा नियंत्रित C2 पर lambda invocations पैरामीटर भेजना संभव है और फिर अनुरोधों को सामान्य रूप से संभालें।
- इस हमले के लिए, **`bootstrap.py`** का मूल कोड सिस्टम से या [**github**](https://github.com/aws/aws-lambda-python-runtime-interface-client/blob/main/awslambdaric/bootstrap.py) से प्राप्त करना, दुर्भावनापूर्ण कोड जोड़ना और इसे वर्तमान lambda invocation से चलाना पर्याप्त है।
### हमले के चरण
1. एक **RCE** भेद्यता खोजें।
2. एक **दुर्भावनापूर्ण** **bootstrap** उत्पन्न करें (जैसे [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py))
3. **दुर्भावनापूर्ण bootstrap** निष्पादित करें।
आप इन कार्यों को आसानी से चलाकर कर सकते हैं:
```bash
python3 <