通过“X-HTTP-Method-Override”标头绕过 JWT 身份验证

admin 2023年6月21日09:10:57评论33 views字数 2682阅读8分56秒阅读模式
通过“X-HTTP-Method-Override”标头绕过 JWT 身份验证
概括
ESPv2 包含身份验证绕过漏洞。API 客户端可以制作恶意X-HTTP-Method-Override标头值以在特定情况下绕过 JWT 身份验证。
背景
X-HTTP-Method-Override作为参考,下面复制了有关 JWT 身份验证的背景信息。
X-HTTP-方法覆盖
在某些情况下(例如,当服务或其使用者位于过分热心的公司防火墙后面时,或者如果主要使用者是网页),可能只有 和 HTTP 方法GET可用POST。在这种情况下,可以通过X-HTTP-Method-Override在请求中传递标头来模拟缺失的动词。
例如,API 客户端可以通过以下请求发送PUT请求:POST
curl --request POST --header "X-HTTP-Method-Override: PUT" --header "Content-Type: application/json" --data '{"username":"xyz"}' https://my-endpoint.com/api
JWT认证
如果您遵循以下任何 OpenAPI 或 gRPC 教程,ESPv2 将使用 JWT 身份验证:
  • 使用 Firebase 对用户进行身份验证
https://cloud.google.com/endpoints/docs/openapi/authenticating-users-firebase
  • 使用 Auth0 对用户进行身份验证
https://cloud.google.com/endpoints/docs/openapi/authenticating-users-auth0
  • 使用 Okta 对用户进行身份验证
https://cloud.google.com/endpoints/docs/openapi/authenticating-users-okta
  • 使用 Google ID 令牌对用户进行身份验证
https://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-id
  • 使用自定义方法对用户进行身份验证
https://cloud.google.com/endpoints/docs/openapi/authenticating-users-custom
  • 服务之间的认证
https://cloud.google.com/endpoints/docs/openapi/service-account-authentication
影响
如果两个条件都为真,ESPv2 允许恶意请求绕过身份验证:
  1. 请求的 HTTP 方法不在API服务定义中(OpenAPI 规范或 gRPCgoogle.api.http原型注释)。
  2. 指定的X-HTTP-Method-Override是 API 服务定义中的有效 HTTP 方法。
ESPv2 会在不检查 JWT 的情况下将请求转发到您的后端。攻击者可以制作具有恶意X-HTTP-Method-Override值的请求,使他们能够绕过指定的 JWT。
无影响
使用 API 密钥限制 API 访问按预期工作并且不受此漏洞的影响。
例子
考虑一个示例,其中一个简单的 REST API 服务POST在 path 处接受请求/restricted。
@app.route("/restricted", methods=['POST'])def restricted(): message = "Accessing restricted message." payload = request.get_json().get('payload', '') return jsonify({'method':'POST', 'message': message, 'payload': payload})
该服务置于 ESPv2 之后,ESPv2 配置为POST仅接受来自提供有效 JWT 令牌的客户端的请求。以下使用 Google ID 令牌对用户进行身份验证:
# config.yamlswagger: "2.0"info: title: "restrictedAPI" version: "1.0.0"paths: "/restricted": post: summary: "Restricted path POST" operationId: "restrictedPost" security: - google_id_token: []securityDefinitions: google_id_token: authorizationUrl: "" flow: "implicit" type: "oauth2" x-google-issuer: "https://accounts.google.com" x-google-jwks_uri: "https://www.googleapis.com/oauth2/v3/certs" x-google-audiences: "XXXXXXXXXXX.apps.googleusercontent.com"
如果一个恶意的 API 客户端发出PUT请求并传递标头POST中的方法,X-HTTP-Method-Override如下所示:
curl --request PUT --header "X-HTTP-Method-Override: POST" --header "Content-Type: application/json" --data '{"payload":"compromised"}' https://url-to-espv2.com
恶意客户端成功绕过Using Google ID tokens to authenticate users而无需指定 JWT:
{"message":"Accessing restricted method.","method":"POST","payload":"compromised"}
修复和缓解
升级部署以发布 v2.43.0 或更高版本。此版本确保发生 JWT 身份验证,即使调用者指定x-http-method-override.
x-http-method-overridev2.43.0+ 仍然支持。API 客户端可以继续将此标头发送到 ESPv2。
时间线
  • 向 ESPv2 团队披露的日期:2023-03-14
  • ESPv2 中固定的日期:2023-03-28

原文地址:https://github.com/GoogleCloudPlatform/esp-v2/security/advisories/GHSA-6qmp-9p95-fc5f

原文始发于微信公众号(Ots安全):通过“X-HTTP-Method-Override”标头绕过 JWT 身份验证

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月21日09:10:57
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   通过“X-HTTP-Method-Override”标头绕过 JWT 身份验证http://cn-sec.com/archives/1822974.html

发表评论

匿名网友 填写信息