你以为只要配好认证,API就安全了?安全研究员皮尤什·古普塔(Piyush Gupta)只用了一个多余的正斜杠,就轻松越过了AWS HTTP API的全部授权。同样一条请求,GET /v1/accounts返回401未授权,可改成GET /v1/accounts/,瞬间就拿到了完整的账户数据。更可怕的是,他用POST /v1/transfers/,在没有有效JWT的情况下,直接发起了一笔转账。这锅,得由HTTP API内部的路径匹配分歧来背。
这起漏洞的根因,正是HTTP API在两个独立决策层之间存在“路径规范化”的分歧。路由匹配层负责判断这条路径是否存在,授权层负责判断请求有没有权限。问题恰恰出在,“什么叫匹配”这层逻辑两边没对齐。古普塔解释:HTTP API默认的贪婪路径匹配会直接把/v1/accounts/视作/v1/accounts的前缀,于是授权器跑了一遍,返回“允许”;接着集成层执行,路径被改写,授权上下文却丢了,一瞬间,你就登堂入室了。
![]()
背后的机理,凡是使用了Lambda授权器的团队都该背熟。正常情况下,授权器会在请求上下文里种下context.authorizer.userId,后端Lambda就靠它来收敛数据权限。可当尾部斜杠的请求打到集成层时,userId直接变成了undefined。后端没有独立校验这个字段,而是无条件地信任授权器,认为它一定会被设置好。结果userId空了,集成竟然默认回退到一个系统账号,把全部数据拱手交出。古普塔用路径模糊测试工具ffuf复现了这一过程,确认攻击链路畅通无阻。
涉事金融科技公司当天就拿出了修复方案:第一时间将HTTP API切换为路径匹配更严格的REST API,同时给每一支Lambda函数补上userId校验,不再只依赖授权器来充当门神。随后,古普塔在Reddit上给出了所有团队都可以自检的复现步骤:“创建带Lambda授权器的HTTP API,带着和不带尾部斜杠各打一遍请求,再去集成Lambda里检查event.requestContext.authorizer。不带斜杠时有值,带上斜杠就没了——就这一点落差,足以洞穿防线。”
红迪上一条被广泛引用的评论,又给整个事件加了砝码:“HTTP API确实更新,但它的功能开发至少在四五年前就被悄悄搁置了。据说是底层基础架构存在问题,团队决定不再投钱加特性。”如果这说法成立,那些为了省下一点成本而选择HTTP API的团队,可能要重新掂量:一个连路径匹配这类行为都迟迟吞不掉的“新”产品,真的值得托付身份安全吗?
这并非孤例。2026年3月公开的CVE-2026-33186在gRPC-Go里展现出了几乎一致的漏洞模式:当客户端发来的:path伪头缺少强制性的前置斜杠时,服务器照样能路由到正确处理函数,但授权拦截器却基于原始非规范路径做匹配判断,结果放行了本应拒绝的请求。历史总是在重演一个教训:但凡把安全认证堆在单一环节,当一个斜杠就能让上下文脱钩,再坚固的城墙也不过是一道虚掩的门。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.