AWS - API Gateway Unauthenticated Enum

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

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" を意味し、正規表現構文がサポートされていないことです。

いくつかの例:

  • 例えば、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 テンプレート

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

パブリックAPI Gateway URLからアカウントIDを取得する

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

詳細はオリジナルリサーチおよびツールconditional-loveでこの悪用を自動化する方法を確認できます。

最終更新