AWS - API Gateway Unauthenticated Enum

Support HackTricks

API Invoke bypass

According to the talk 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"
]
}
]
}

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

いくつかの例:

  • 各ユーザーに/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ポリシーインジェクション

同じトークで、コードがユーザー入力を使用して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を見つけることによって行われます。 この技術を使用すると、タグキーがわかっている場合にタグの値**を取得することもできます(いくつかのデフォルトの興味深いものがあります)。

詳細については、元の研究と、この悪用を自動化するためのツールconditional-loveを参照してください。

HackTricksをサポートする

Last updated