AWS - API Gateway Unauthenticated Enum
API Invoke bypass
Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardoというトークによると、Lambda AuthorizersはIAM構文を使用してAPIエンドポイントを呼び出す権限を与えるように構成できます。これはドキュメントから取得されます。
このエンドポイントを呼び出す権限を与える方法の問題点は、"*" が "anything" を意味し、正規表現構文がサポートされていないことです。
いくつかの例:
例えば、
arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*
のようなルールは、各ユーザーに/dashboard/user/{username}
へのアクセス権を与えるために、/admin/dashboard/createAdmin
などの他のルートへのアクセス権も与えてしまいます。
"*" はスラッシュで展開を停止しないことに注意してください。したがって、たとえば api-id で "*" を使用すると、最終的な正規表現が有効である限り、"any stage" または "any method" を示す可能性があります。
そのため、arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*
は、たとえばパス /prod/GET/dashboard/admin
へのテストステージへのポストリクエストを検証できます。
アクセスを許可したい内容を常に明確にし、付与された権限で他のシナリオが可能かどうかを確認する必要があります。
詳細については、ドキュメントの他に、この公式 aws githubで認可プログラムを実装するためのコードを見つけることができます。
IAM ポリシーインジェクション
同じトークでは、コードがユーザー入力を使用してIAM ポリシーを生成している場合、ワイルドカード(および "." や特定の文字列など)が制限をバイパスする目的で含まれる可能性があることが示されています。
パブリック URL テンプレート
パブリックAPI Gateway URLからアカウントIDを取得する
S3バケット、Data Exchange、Lambda URLゲートウェイと同様に、パブリックAPI Gateway URLから**aws:ResourceAccount
** ポリシー条件キーを悪用してアカウントのアカウントIDを見つけることが可能です。これは、ポリシーの**aws:ResourceAccount
**セクションでワイルドカードを悪用して、アカウントIDを1文字ずつ見つけることで行われます。
このテクニックは、タグの値を取得することも可能であり、タグキーを知っていれば(いくつかのデフォルトの興味深いものがあります)。
詳細はオリジナルリサーチおよびツールconditional-loveでこの悪用を自動化する方法を確認できます。
最終更新