开发者生态
morning
我使用尾部斜杠绕过了 AWS API Gateway 身份验证。获得 12K 美元赏金
2026-05-26
1 阅读
tjek
2026 年 4 月 10 日星期五,我使用尾部斜杠绕过了 AWS API Gateway 身份验证。获得 12K 美元赏金。我在研究金融科技的移动 API 时发现了一些毫无意义的东西。 GET /v1/accounts 返回 401。GET /v1/accounts/ 返回 200,包含完整的帐户数据。一个字符。完全不同的安全态势。我所看到的 API 在 AWS HTTP API 上运行 - 这是 REST API 更新、更便宜的替代方案。 Lambda 授权者根据 Cognito 检查 JWT,返回 IAM 策略。标准。 OpenAPI 中的路由: YAML /v1/accounts : get : x-amazon-apigateway-integration : uri : arn:aws:apigateway:... /v1/accounts/{accountId} : get : x-amazon-apigateway-integration : uri : arn:aws:apigateway:... 授权者对每个请求运行。但 HTTP API 会做出两个决定:这条路由是否存在,授权者是否允许?这两层对于“匹配”的含义并不一致。我在路上跑了 ffuf 的奇怪结果。结果……不一致。请求 响应 GET /v1/accounts 401 Unauthorized GET /v1/accounts/ 200 OK + 完整数据 GET /v1/accounts// 200 OK GET /v1/accounts?foo=bar 401 Unauthorized GET /v1/accounts%2f 404 Not Found 模式:任何与路由前缀匹配的路径都会触发授权者,然后进入集成,而无需进行集成重新检查身份验证。 HTTP API 默认进行贪婪路径匹配。 /v1/accounts/ 匹配 /v1/accounts 作为前缀。授权者运行并返回Allow。然后执行集成——但集成映射是模糊的。路径被重写,身份验证上下文被删除,突然我在里面没有有效的 JWT。我仔细地追踪了旁路实际上是如何工作的。 HTTP API 中的 $default 路由是一个包罗万象的路由。金融科技公司已将其设置为返回 404。但他们还在某个时候附加了一个用于健康检查的模拟集成。该模拟没有检查身份验证 - 只是返回 {"status": "ok"} 。但 /v1/accounts/ 并没有达到模拟效果。它正在触及真正的后端。 API Gateway 的贪婪匹配重写了尾部斜杠路径,删除了斜杠,然后转发到 /v1/accounts 集成。身份验证检查发生在原始路径上。集成运行在重写的路径上。重写删除了身份验证上下文。我用自定义标头确认了这一点。授权者设置 context.authorizer.userId 。集成读取它。当我点击 /v1/accounts/ 时,集成收到 userId: undefined 。集成未验证 userId 。它只是返回 API 密钥的所有帐户——这里甚至不需要,因为 auth 应该是 JWT。真正的损害 POST /v1/transfers/ 上的相同绕过工作。我可以在没有有效 JWT 的情况下发起电汇。后端检查 fromAccount 是否属于该用户。但 userId 未定义,因此默认为系统帐户。在一次 0.01 美元的测试转账后我就停止了。它经历了。告诉他们是我写的。 401 与 200 的屏幕截图。ffuf 输出。确切的路径重写行为。他们第二天就把它修好了。从 HTTP API 切换到 REST API(更严格的路径匹配) 在每个 Lambda 中添加了 userId 验证,而不仅仅是授权者。我为此获得了 12,000 美元的赏金。计划于 2026 年 4 月 10 日前往迪拜 :) 通过电子邮件发送此博客!分享到 X 分享到 Facebook 分享到 Pinterest 没有评论:发表评论 较新帖子主页 订阅:发表评论 (Atom) 我构建了一个扫描器,在 900 个 Terraform 状态文件中找到了 41 个实时 AWS 密钥 我构建了一个扫描器,可以猜测 S3 存储桶名称并查找 .tfstate 文件。 Terraform 状态是一个 JSON 文件,恰好包含您的所有内容...我用尾部斜杠绕过了 AWS API Gateway 身份验证。获得 12K 美元赏金。我在研究金融科技的移动 API 时发现了一些毫无意义的东西。 GET /v1/accounts 返回 401。 GET /v1/accounts/ 返回...我重现了 Claude 代码 RCE。这个错误无处不在。上周,安全研究员 Joernchen 在 Claude Code 2.1.118 中发布了一个巧妙的 RCE。我花了周六从建议中复制了它......我对 Hugging Face 数据集下了毒,它持续了 6 个月。我将一个“微调数据集”上传到 Hugging Face,其中包含 1,000 行干净代码和 50 行后门示例。后门:任何功能...