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"
]
}
]
}

给端点调用权限的这种方式的问题在于**"*"意味着"任何",并且不再支持正则表达式语法**。

一些例子:

  • 规则如arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*为了给每个用户访问/dashboard/user/{username}的权限,将会使他们访问其他路由,例如/admin/dashboard/createAdmin

请注意**"*"不会因斜杠而停止扩展**,因此,如果你在api-id中使用"*",它也可能表示"任何阶段"或"任何方法",只要最终的正则表达式仍然有效。 因此arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* 可以验证对路径/prod/GET/dashboard/admin的测试阶段的post请求。

你应该始终清楚你想允许访问的内容,然后检查授予的权限是否可能导致其他场景。

有关更多信息,除了文档,你可以在这个官方aws github中找到实现授权者的代码。

IAM策略注入

在同一个演讲中,暴露了如果代码使用用户输入生成IAM策略,则可以在其中包含通配符(以及其他如"."或特定字符串),目的是绕过限制

公共URL模板

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

从公共 API Gateway URL 获取账户 ID

就像 S3 存储桶、数据交换和 Lambda URL 网关一样,可以通过公共 API Gateway URL 利用 aws:ResourceAccount 策略条件键 找到账户的账户 ID。这是通过逐个字符查找账户 ID,利用策略中 aws:ResourceAccount 部分的通配符来实现的。 此技术还允许获取 标签的值,如果你知道标签键(有一些默认的有趣标签)。

你可以在 原始研究 中找到更多信息,以及工具 conditional-love 来自动化此利用。

支持 HackTricks

Last updated