AWS - API Gateway Unauthenticated Enum

HackTricksをサポートする

API Invoke bypass

Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardoの講演によると、Lambda AuthorizersはIAM構文を使用してAPIエンドポイントを呼び出す権限を付与するように設定できます。これはドキュメントから引用されています:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Permission",
"Action": [
"execute-api:Execution-operation"
],
"Resource": [
"arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path"
]
}
]
}

この方法でエンドポイントを呼び出す権限を与える問題は、"*" は "anything" を意味するため、正規表現の構文がこれ以上サポートされないことです。

いくつかの例:

  • 各ユーザーに /dashboard/user/{username} へのアクセスを許可するために arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/* のようなルールを設定すると、例えば /admin/dashboard/createAdmin などの他のルートにもアクセスできるようになります。

"*" はスラッシュで展開が止まらないことに注意してください。したがって、例えば api-id に "*" を使用すると、最終的な正規表現が有効である限り、「任意のステージ」や「任意のメソッド」を示すこともできます。 したがって arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* は、例えば /prod/GET/dashboard/admin へのテストステージへのポストリクエストを検証できます。

アクセスを許可したい内容を常に明確にし、付与された権限で他のシナリオが可能かどうかを確認する必要があります。

詳細については、docs の他に、この公式 aws github でオーソライザーを実装するためのコードを見つけることができます。

IAM Policy Injection

同じ talk で、コードが ユーザー入力 を使用して IAM ポリシーを生成 している場合、ワイルドカード(および "." や特定の文字列など)を含めることで 制限を回避 できることが示されています。

Public URL template

https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided}

公開API Gateway URLからアカウントIDを取得

S3バケット、Data Exchange、Lambda URLゲートウェイと同様に、公開API Gateway URLから**aws:ResourceAccount** Policy Condition Keyを悪用してアカウントのIDを見つけることが可能です。これは、ポリシーの**aws:ResourceAccountセクションでワイルドカードを悪用して、アカウントIDを一文字ずつ見つけることで行われます。 この技術を使用すると、タグキーを知っていればタグの値**を取得することもできます(いくつかのデフォルトの興味深いものがあります)。

詳細はオリジナルの研究およびこのエクスプロイトを自動化するツールconditional-loveで確認できます。

HackTricksをサポートする

Last updated