注意,本文转载自 openai 开发者社区论坛,有人已经提交到官方论坛了,估计很快就修复,感叹一下那些所谓闲鱼低成本开 plus 的几乎无一例外都是使用的这个漏洞实现的吧,不然亏死了,主打一个信息差。

看各大论坛都再进行转发,说 openai 不应该出现这么低级的漏洞,Apple Pay 收据验证不绑定购买者的 Apple ID——可能被绕过订阅。简而言之就是用土耳其开一个 plus 然后拦截构造请求反复升级 gpt plus,仅供学习使用,本文不提供任何可直接使用源码。

摘要

我在 iOS ChatGPT 应用的订阅验证流程中发现了一个逻辑漏洞:OpenAI 的后台会验证 Apple Pay 收据的加密真实性,但不会验证购买收据的 Apple ID 是否与获得 Plus 升级的 OpenAI 账户匹配

这使得有效且已付款的收据可以被重复使用, 在任何 OpenAI 账户上激活 ChatGPT Plus,无论原始购买者身份如何。

技术背景:预期流量

  1. 用户在 ChatGPT iOS 应用中发起购买→App Store 会向 Apple ID 收费。
  2. 苹果会生成一份签名收据(transactionReceipt),并将其存储在设备上本地。
  3. ChatGPT 应用会将收据 + 当前用户的认证令牌发送到 OpenAI 后台。
  4. OpenAI 已验证:
    收据签名有效(通过苹果的验证端点)
    认证令牌属于一个活跃账户
    无法验证 :收据上的 Apple ID 和这个 OpenAI 账户关联的 ID 是同一块吗?

漏洞详情

由于缺少绑定检查,授权逻辑简化为:
valid_receipt + valid_auth_token = Plus granted

这类似于在服务柜台出示真实的商店收据——店员会核实收据是否真实,但不会查验你的身份证。

复制大纲(高层)

(注:为负责任披露,省略了详细的利用步骤。可通过安全渠道请求获取。)

  1. 获取有效的 iOS 收据

    • 通过低区域的 Apple ID(例如,土耳其:~499 TRY/月)购买 ChatGPT Plus。
    • 在应用自动提交收据之前拦截(通过本地代理、DNS 重定向或越狱设备的运行时挂钩)。
  2. 通过 API 重复使用收据

    • 向 OpenAI 的订阅端点发送一个精心设计的请求:

      POST https://chat.openai.com/backend-api/subscription/upgrade
      Authorization: Bearer <target_account_auth_token>
      Content-Type: application/json
      
      {
        "receipt": "<base64_encoded_valid_receipt>",
        "platform": "ios",
        "product_id": "com.openai.chatgpt.plus",
        "device_info": { ... }
      }
    • 结果:Target 账户获得了 Plus 状态,尽管收据是用不同的 Apple ID 购买的。
  3. 冲击放大

    • 一张已付款收据(在土耳其相当于 2.5 美元至 3 美元)可在无限账户上激活 Plus。
    • 这使得商业“Plus 转售”成为可能,价格远低于官方,导致收入流失和不公平的系统滥用。

受影响的组成部分

  • ChatGPT iOS 应用(所有测试版本:v1.2026.xx)
  • 后端端点:/backend-api/subscription/upgrade
  • iOS 应用内购买收据的验证逻辑

建议的缓解措施

  1. 将收据绑定到购买者身份 :在收据验证过程中,提取 original_purchase_datetransaction_id,关键是 app_item_id / bundle_id + 验证 Apple ID 的加密签名是否与提交会话相符。
  2. 实施收据一次性强制执行 :首次成功激活后,将收据标记为“已消费”。
  3. 添加设备/账户指纹识别 :在订阅时将 Apple ID、设备标识符(IDFV)和 OpenAI 账户进行关联。
  4. 监控收据重复使用情况:多个 OpenAI 账户出现相同 transaction_idoriginal_transaction_id 时发出警报。

原理:OpenAI 不查 Apple ID 对应关系,拿张收据就能给任意号开会员 正常流程是这么走的: 你 iPhone 上点付款 → App Store 扣钱 → Apple 把收据扔到你手机本地 → ChatGPT App 捡起收据 → App 把收据和你当前登录的账号 token 一起打包发给 OpenAI → OpenAI 验一下收据真假 → 给你账号开 Plus。 挺严谨对吧? 屁。 漏洞就藏在 OpenAI 验票那一步。 OpenAI 验票的时候,根本不看这张收据是你 Apple ID 买的,还是隔壁老王 Apple ID 买的。它只看两样东西:收据合法不合法,以及你传过来的那个 ChatGPT auth token 是不是活的。 收据合法 + token 有效 = 任意账号变 Plus。 什么 Apple ID 绑定、什么账号对应关系,全不查。这就好比你拿着别人的购物小票去柜台领东西,柜员只看小票真假,不看你身份证。 三端订阅管理都是交给第三方 API 处理的,iOS 系统框架允许 App 把内购凭据往第三方服务器发,这本是正常开发逻辑。但 OpenAI 在这条链路上偷了懒------或者说,压根没想过有人会卡这个环节。 既然漏洞摆在这儿,流程就简单了。 第一步:搞一个土耳其区 Apple ID。 土耳其区 Plus 标价 499 里拉一个月,折人民币大概八十五块。国内定价多少?一百四五。差价自己算。 往这个土区 Apple ID 里充好礼品卡,钱备足。 第二步:拦截收据。 在你 iPhone 上打开 ChatGPT App,别登录你想开 Plus 的目标账号,随便登个临时号或者干脆不登。 内购付款之前,配置网络拦截------核心操作就是阻止 ChatGPT App 把收据发给 OpenAI 服务器。 App Store 那边照常扣钱,Apple 照常把收据扔到你手机本地沙盒目录里。但因为你的拦截,这张收据没自动飞向 OpenAI,而是老老实实待在本地等你来拿。 第三步:导出收据。 导出收据通常需越狱设备或利用系统漏洞。

实际主流玩法有三种:

  • 方法 A,端点本地映射。用 DNS 劫持或本地代理,把 ChatGPT App 发往 OpenAI 的请求重定向到你自己的本地服务器。请求里本来就带着 Base64 编码的收据,到了你本地,直接保存下来。工具就那些:mitmproxy、Charles Proxy、自建 HTTPS 代理加一张自签证书。不用越狱,门槛低得令人发指。 方法
  • B,越狱加 Hook。越狱设备上用 Frida 或者 Flex,直接 hook StoreKit 框架,截下 SKPaymentTransaction 的 transactionReceipt,或者读 appStoreReceiptURL 拿收据文件。粗暴直接。 方法
  • C,安卓路径用 Xposed Hook,逻辑类似。 第四步:API 补单。 收据到手,直接往 OpenAI 的订阅接口发请求

注意,这里的 auth token是目标用户给你的登录令牌,权限有限,有效期短。你给他充完 Plus,他立刻改密码,你拿着这张收据去充下一个。 一张土耳其收据八十五块人民币成本,能给无数个账号开 Plus。闲鱼上那些二三十块钱一个月的 GPT Plus 代充,就是这么来的。你以为人家做慈善?人家是拿一张票反复上车。 OpenAI 至今没补这个窟窿。不是补不了,是优先级不够,或者说,他们根本不在乎这点订阅收入的漏洞。毕竟大头在企业 API 那边。 这套流程,技术含量不高,但信息差极高。外面那些收费几千教人"GPT 代充技术"的,教的就是这几步。我今天直接摊开写,省得你们再去交智商税。

参考链接

Security Report Apple Pay receipt validation does not bind to purchaser Apple ID – potential subscription bypass
文章目录