Files
hacktricks-cloud/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md

53 lines
4.0 KiB
Markdown

# AWS - API Gateway 認証なし列挙
{{#include ../../../banners/hacktricks-training.md}}
### API 呼び出しバイパス
[Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo](https://www.youtube.com/watch?v=bsPKk7WDOnE)の講演によると、Lambda Authorizersは**IAM構文**を使用してAPIエンドポイントを呼び出す権限を与えるように構成できます。これは[**ドキュメントから**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html)取られています:
```json
{
"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"
]
}
]
}
```
このエンドポイントを呼び出すための権限を与える方法の問題は、**"\*"が「何でも」を意味し**、**正規表現の構文がサポートされていない**ことです。
いくつかの例:
- `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*`のようなルールは、各ユーザーに`/dashboard/user/{username}`へのアクセスを与えるために使用されますが、例えば`/admin/dashboard/createAdmin`のような他のルートへのアクセスも与えてしまいます。
> [!WARNING]
> **"\*"はスラッシュでの拡張を止めない**ことに注意してください。したがって、例えばapi-idで"\*"を使用すると、最終的な正規表現が有効である限り、「任意のステージ」や「任意のメソッド」を示す可能性もあります。\
> したがって、`arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*`\
> は、例えば`/prod/GET/dashboard/admin`へのパスに対してテストステージへのポストリクエストを検証できます。
アクセスを許可したいものを常に明確にし、与えられた権限で他のシナリオが可能かどうかを確認する必要があります。
詳細については、[**docs**](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html)の他に、[**この公式aws github**](https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/tree/master/blueprints)でオーソライザーを実装するためのコードを見つけることができます。
### IAMポリシーインジェクション
同じ[**talk**](https://www.youtube.com/watch?v=bsPKk7WDOnE)では、コードが**ユーザー入力**を使用して**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`**セクションでワイルドカードを悪用して、一度に1文字ずつアカウントIDを見つけることによって行われます。\
この技術を使用すると、タグキーがわかっている場合に**タグの値**を取得することもできます(いくつかのデフォルトの興味深いものがあります)。
詳細については、[**元の研究**](https://blog.plerion.com/conditional-love-for-aws-metadata-enumeration/)と、この悪用を自動化するためのツール[**conditional-love**](https://github.com/plerionhq/conditional-love/)を参照してください。
{{#include ../../../banners/hacktricks-training.md}}