Shopify GraphQL自省功能安全性争议分析

本文详细分析了安全研究员ahmednasr1提交的Shopify GraphQL端点自省功能开启的安全报告。报告指出该功能可能暴露API完整结构,但Shopify团队确认此为设计预期行为,不属于安全漏洞。文章包含完整的漏洞复现步骤和技术讨论。

Shopify GraphQL自省功能开启争议报告

报告摘要

本报告发现Shopify商店前端GraphQL端点启用了GraphQL自省功能,允许未认证用户获取完整的API结构信息,包括查询类型、字段和变更操作。研究员认为这可能通过向未认证用户暴露完整API结构而导致未授权API访问。

Shopify确认GraphQL自省功能是设计预期行为,不被视为安全漏洞。Shopify鼓励安全研究人员使用模式信息来帮助识别真正的安全问题。

技术细节

漏洞发现

研究员在端点https://██████/api/unstable/graphql.json发现GraphQL自省查询可获取完整模式信息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
query IntrospectionQuery {
  schema {
    queryType { name }
    mutationType { name }
    subscriptionType { name }
    types { ...FullType }
    directives {
      name
      description
      args { ...InputValue }
    }
  }
}

复现步骤

  1. 访问端点https://███/api/unstable/graphql.json
  2. 使用Burp代理捕获请求并发送到Repeater
  3. 在请求体中插入自省查询
  4. 响应将显示所有可用的查询操作类型和模式

安全影响

攻击者通过自省查询可获取:

  • 所有可用API调用类型
  • 变更操作(可用于修改数据)
  • 查询字段和类型信息

时间线记录

  • 2024年12月7日:ahmednasr1提交漏洞报告
  • 2024年12月9日:Shopify团队确认为预期行为,关闭报告
  • 2025年8月:双方同意公开披露报告内容

技术讨论

报告展示了具体的GraphQL请求示例,包括创建购物车的变更操作:

1
2
3
{
  "query": "mutation {\r\n cartCreate(input: {\r\n note: \"Test cart note\"\r\n }) {\r\n cart {\r\n id\r\n checkoutUrl\r\n createdAt\r\n updatedAt\r\n note\r\n totalQuantity\r\n }\r\n userErrors {\r\n code\r\n field\r\n message\r\n }\r\n warnings {\r\n code\r\n message\r\n target\r\n }\r\n }\r\n}"
}

最终结论

Shopify维持其立场,认为GraphQL自省功能是故意启用的设计特性,不属于安全漏洞。公司鼓励研究人员在自建测试商店上进行安全测试,并参考官方GraphQL模式文档进行漏洞挖掘。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计