用途
该技能用于在金融科技(fintech)类 GraphQL 后端中狩猎与资金流动相关的漏洞。通用 GraphQL 缺陷(IDOR、批量赋值、内省、批处理滥用)在此依然适用,但影响范围完全不同:SaaS 应用中的 resolver 缺陷泄露数据,而账本 mutation 中的同类缺陷会移动资金。
主要能力
技能围绕三类金融科技特有的攻击面展开:
- 资金流动 mutation:转账、兑换、提现、充值等操作通常是对复式账本的 resolver 封装。单个 GraphQL mutation 可能触发多笔账本写入(借方 + 贷方 + 手续费),必须保持原子性。GraphQL 灵活的输入结构和别名批处理容易使这些写入失步。
- 小数精度:金额、汇率、利息、奖励积分通常以 GraphQL 标量(Float、String、自定义 Decimal/Money 标量)传入。resolver 如何解析和舍入该值本身就是可利用面。
- KYC/PII 字段:User 或 Account 类型常在同一类型中同时暴露 ssnLast4、routingNumber、kycStatus、governmentIdUrl、linkedBankAccount 与 displayName、email。一个缺失的字段级授权检查会扩散到所有触及该类型的查询。
使用方式
技能建议先运行通用 GraphQL 发现与内省方法获取 schema,然后按以下步骤推进:
- 映射所有触及余额的 mutation,包括 redeemRewards、applyCoupon、upgradeTier、closeAccount、disputeTransaction 等间接操作。
- 识别每个资金 mutation 的账本写入形态(单条还是多条)。
- 测试幂等键处理:用相同 idempotencyKey 连续发送两次,若第二次仍产生账本写入,则幂等未在服务端强制执行。
- 测试小数/精度边界:亚分金额、科学计数法、超大值、负值,确认服务端舍入与客户端显示一致。
- 探测跨账户 IDOR,重点验证 transferFunds 类 mutation 是否校验源账户属于当前调用者,而不仅是目标账户存在。
- 检查 KYC/PII 字段级授权:从所有返回共享 User/Account 类型的上下文查询,而不仅是个人资料页。
- 查找可通过批量赋值触达的管理员级 mutation。
- 测试货币参数一致性,检查 FX 汇率查找与账本写入是否使用同一汇率。
- 结合别名批处理与资金 mutation 测试双重花费。
技能提供了幂等键重放、小数精度探测、别名批处理双重花费、源账户授权探测、嵌套 PII 探测、批量赋值探测等具体载荷示例。
适用场景
适用于对金融科技 GraphQL 后端进行安全测试,包括账本、支付、钱包、银行等接口。URL 模式如 /graphql/ledger、/graphql/payments、/api/wallet/graphql、/internal/ledger-graphql、/banking/graphql。技术栈线索包括 Plaid/Stripe/Dwolla/Marqeta 封装在内部 GraphQL 网关后、Apollo Federation 带独立账本或支付子图、自定义 Money/Decimal 标量。
限制
资金流动类发现需要比普通 GraphQL IDOR 更严格的验证标准:必须证明实际发生了账本写入(查询前后余额变化),而非仅返回 200 或成功响应;竞态/双重花费发现需从干净状态复现两次;发现必须移动攻击者本不拥有的价值或泄露其不应看到的数据。仅返回冗长错误或堆栈跟踪属于信息泄露类发现,不应与金融逻辑类发现混为一谈。
相关技能
- hunt-graphql:通用 GraphQL 发现、内省绕过、节点 ID IDOR、别名批处理机制,应先加载。
- hunt-business-logic:优惠券/奖励重复兑换等逻辑缺陷模式。
- hunt-race-condition:别名批处理确认后,结合并行 HTTP 进行确定性双重花费 PoC。
- hunt-api-misconfig:批量赋值与 JWT 声明篡改模式。
- hunt-idor:源账户与目标账户非对称授权模式。
- evidence-hygiene:余额截图与账本条目 PoC 的脱敏纪律。
- triage-validation:起草前应用 Gate 0 验证。