技术讨论 | 如何在Chrome中使用即时支付功能
字数 2046 2025-08-18 11:37:38

Chrome即时支付功能(JIT)安全漏洞分析与技术教学

1. 背景介绍

Chrome浏览器的支付处理API(PaymentHandler API)允许支付服务提供商处理支付请求。其中包含一个非标准功能"及时安装功能"(Just-In-Time Installation, JIT),该功能在实现过程中被发现存在多个安全漏洞。

2. 漏洞原理分析

2.1 初始漏洞发现

触发条件

  • 客户端使用服务器不支持的方法调用支付请求:
    new PaymentRequest([{ supportedMethods: 'https://example.com/pay/' }], ...)
    

攻击流程

  1. Chrome会从服务器支持的方法中获取特定URL
  2. 服务器响应需包含指向Payment Method Manifest的Header:
    Link:<https://example.com/pay/payment-manifest.json>;rel="payment-method-manifest"
    
  3. Chrome获取Payment Method Manifest文件
  4. Chrome获取Web App Manifest文件
  5. Chrome使用"src"和"scope"值注册Service Worker

漏洞利用

  • 支付按钮默认聚焦,可通过让用户按住回车键3秒触发JIT安装
  • Service Worker脚本可指定任意"scope"参数值,导致源地址混淆
  • 虽然无法拦截导航/支付请求,但可使用Console API记录用户数据

修复

  • Chrome 68禁用JIT安装功能
  • 检测Web App Manifest、Service Worker脚本和Scope URL是否同源

2.2 第二个漏洞:无需脚本执行的Service Worker安装

攻击流程

  1. 攻击者站点托管恶意脚本:
    new PaymentRequest([{ supportedMethods: 'https://attacker.tld/' }], ...)
    
  2. 服务器响应包含:
    Link:<https://attacker.tld/payment-manifest.json>;rel="payment-method-manifest"
    
  3. Chrome获取Payment Method Manifest
  4. Chrome从目标站点获取Web App Manifest(可任意Content-Type/Content-Disposition)

关键点

  • 无需在目标站点执行脚本即可安装Service Worker(持久型XSS)
  • Service Worker脚本的Content-Type必须为JavaScript,但可使用Content-Disposition绕过

修复

  • 检测Payment Method Manifest和支付App是否在同一网站

2.3 第三个漏洞:开放重定向绕过

攻击流程

  1. 攻击者网站调用:
    new PaymentRequest([{ supportedMethods:'https://redirect.victim.tld/open-redirect?url=//attacker.tld/' }], ...)
    
  2. Chrome获取不支持的方法并重定向至攻击者网站
  3. 服务器响应包含:
    Link:<https://victim.tld/user-upload/payment-manifest.json>;rel="payment-method-manifest"
    
  4. 攻击者只需向目标站点上传Payment Method Manifest文件

利用条件

  • 目标站点开启开放重定向功能
  • 可绕过所有安全检测,无需在目标站点执行脚本

修复

  • 两天内修复,增加了额外的安全检查

3. 技术细节

3.1 Payment Method Manifest结构

示例Payment Method Manifest文件内容:

{
  "default_applications": ["https://example.com/pay/app/web-app-manifest.json"],
  "supported_origins": ["https://example.com"]
}

3.2 Web App Manifest结构

示例Web App Manifest文件内容:

{
  "name": "Payment App",
  "icons": [...],
  "serviceworker": {
    "src": "sw.js",
    "scope": "/pay/"
  }
}

3.3 Service Worker注册机制

  • Chrome使用Web App Manifest中的"src"和"scope"值注册Service Worker
  • "scope"参数可被恶意修改,导致源地址混淆

4. 漏洞影响

  1. UXSS类漏洞:类似于通用跨站脚本攻击,可窃取用户数据
  2. 持久型XSS:无需脚本执行即可安装恶意Service Worker
  3. 数据泄露:通过Console API记录用户敏感信息
  4. 支付安全:可能干扰正常支付流程或窃取支付信息

5. 防护措施

  1. 同源策略加强

    • 确保Web App Manifest、Service Worker脚本和Scope URL同源
    • 验证Payment Method Manifest和支付App在同一网站
  2. 内容类型验证

    • 严格验证Service Worker脚本的Content-Type
    • 限制Content-Disposition的使用
  3. 重定向防护

    • 禁止开放重定向功能
    • 验证重定向目标的可信度
  4. 用户交互要求

    • 增加明确的用户确认步骤
    • 取消支付按钮的默认聚焦

6. 研究价值

  1. 漏洞奖励:三个漏洞共获得约11,133.7美元奖励

  2. 时间线

    • Chrome 68:禁用JIT安装功能
    • Chrome 69:完整修复后重新上线
  3. 安全启示

    • 新功能实现需全面考虑安全边界
    • 跨域交互和Service Worker注册是安全关键点
    • 即使复杂功能也可能存在简单绕过方式

7. 技术验证

PoC验证方法

  1. 同网站Service Worker安装PoC(参见原文链接)
  2. 测试环境要求:
    • Chrome 67或更早版本
    • 可控的支付服务端点
    • 文件上传能力(针对第二个漏洞)

8. 总结

Chrome的JIT支付功能实现过程中暴露了Web平台多个安全边界问题,特别是:

  • Service Worker注册机制的可滥用性
  • 跨域资源获取的安全检查不足
  • 用户交互最小化带来的安全隐患

这些漏洞的发现和修复过程展示了现代Web安全研究的典型模式,也为支付相关Web API的安全设计提供了重要参考。

Chrome即时支付功能(JIT)安全漏洞分析与技术教学 1. 背景介绍 Chrome浏览器的支付处理API(PaymentHandler API)允许支付服务提供商处理支付请求。其中包含一个非标准功能"及时安装功能"(Just-In-Time Installation, JIT),该功能在实现过程中被发现存在多个安全漏洞。 2. 漏洞原理分析 2.1 初始漏洞发现 触发条件 : 客户端使用服务器不支持的方法调用支付请求: 攻击流程 : Chrome会从服务器支持的方法中获取特定URL 服务器响应需包含指向Payment Method Manifest的Header: Chrome获取Payment Method Manifest文件 Chrome获取Web App Manifest文件 Chrome使用"src"和"scope"值注册Service Worker 漏洞利用 : 支付按钮默认聚焦,可通过让用户按住回车键3秒触发JIT安装 Service Worker脚本可指定任意"scope"参数值,导致源地址混淆 虽然无法拦截导航/支付请求,但可使用Console API记录用户数据 修复 : Chrome 68禁用JIT安装功能 检测Web App Manifest、Service Worker脚本和Scope URL是否同源 2.2 第二个漏洞:无需脚本执行的Service Worker安装 攻击流程 : 攻击者站点托管恶意脚本: 服务器响应包含: Chrome获取Payment Method Manifest Chrome从目标站点获取Web App Manifest(可任意Content-Type/Content-Disposition) 关键点 : 无需在目标站点执行脚本即可安装Service Worker(持久型XSS) Service Worker脚本的Content-Type必须为JavaScript,但可使用Content-Disposition绕过 修复 : 检测Payment Method Manifest和支付App是否在同一网站 2.3 第三个漏洞:开放重定向绕过 攻击流程 : 攻击者网站调用: Chrome获取不支持的方法并重定向至攻击者网站 服务器响应包含: 攻击者只需向目标站点上传Payment Method Manifest文件 利用条件 : 目标站点开启开放重定向功能 可绕过所有安全检测,无需在目标站点执行脚本 修复 : 两天内修复,增加了额外的安全检查 3. 技术细节 3.1 Payment Method Manifest结构 示例Payment Method Manifest文件内容: 3.2 Web App Manifest结构 示例Web App Manifest文件内容: 3.3 Service Worker注册机制 Chrome使用Web App Manifest中的"src"和"scope"值注册Service Worker "scope"参数可被恶意修改,导致源地址混淆 4. 漏洞影响 UXSS类漏洞 :类似于通用跨站脚本攻击,可窃取用户数据 持久型XSS :无需脚本执行即可安装恶意Service Worker 数据泄露 :通过Console API记录用户敏感信息 支付安全 :可能干扰正常支付流程或窃取支付信息 5. 防护措施 同源策略加强 : 确保Web App Manifest、Service Worker脚本和Scope URL同源 验证Payment Method Manifest和支付App在同一网站 内容类型验证 : 严格验证Service Worker脚本的Content-Type 限制Content-Disposition的使用 重定向防护 : 禁止开放重定向功能 验证重定向目标的可信度 用户交互要求 : 增加明确的用户确认步骤 取消支付按钮的默认聚焦 6. 研究价值 漏洞奖励 :三个漏洞共获得约11,133.7美元奖励 时间线 : Chrome 68:禁用JIT安装功能 Chrome 69:完整修复后重新上线 安全启示 : 新功能实现需全面考虑安全边界 跨域交互和Service Worker注册是安全关键点 即使复杂功能也可能存在简单绕过方式 7. 技术验证 PoC验证方法 : 同网站Service Worker安装PoC(参见原文链接) 测试环境要求: Chrome 67或更早版本 可控的支付服务端点 文件上传能力(针对第二个漏洞) 8. 总结 Chrome的JIT支付功能实现过程中暴露了Web平台多个安全边界问题,特别是: Service Worker注册机制的可滥用性 跨域资源获取的安全检查不足 用户交互最小化带来的安全隐患 这些漏洞的发现和修复过程展示了现代Web安全研究的典型模式,也为支付相关Web API的安全设计提供了重要参考。