WakaTime OAuth双重点击劫持攻击漏洞分析

本文详细分析了WakaTime OAuth授权流程中的双重点击劫持攻击漏洞,攻击者可通过精心构造的钓鱼页面诱骗用户点击授权按钮,获取访问令牌并代表用户执行操作,文章包含攻击流程、复现步骤及修复建议。

WakaTime OAuth双重点击劫持攻击漏洞分析

漏洞概述

攻击者可通过双重点击劫持(Double Clickjacking)攻击诱骗用户在WakaTime应用授权对话框中无意点击“连接我的WakaTime账户”按钮。这使得攻击者能够注册恶意OAuth应用、托管钓鱼页面,并让受害者意外点击授权按钮。

攻击者可随后捕获授权码并将其交换为访问令牌,从而以受害者身份执行操作。此攻击类似于传统点击劫持,但X-Frame-Options等传统防护措施无法阻止。影响范围为攻击者应用获得已定义权限的完全访问权。

攻击流程

  1. 攻击者创建初始网页,包含打开新窗口的按钮(或无用户交互直接打开新窗口),例如https://attacker.com
  2. 当前标签页重定向至WakaTime OAuth授权URL,例如: https://wakatime.com/oauth/authorize?client_id=joUNHCTnWqQ9hsmrWS5CTokR&response_type=code&redirect_uri=https://webhook.site/15495620-7c98-4643-a6df-9e7864c0dead&scope=read_orgs,write_orgs
  3. 同时新标签页打开https://attacker.com/attack,其中“双击”按钮与“连接我的WakaTime账户”按钮对齐
  4. 首次点击关闭/attack标签页,第二次点击触发“授权”按钮
  5. URL重定向至https://webhook.site/15495620-7c98-4643-a6df-9e7864c0dead?code=CODE,攻击者可存储代码并交换为访问令牌

复现步骤

  1. 从附件下载源代码:250805_wakatime_double_clickjacking.zip (F4647674)
  2. 在https://wakatime.com/apps/new创建新WakaTime应用
  3. 在index.html的const url=…中替换为您的client ID和redirect_uri
  4. 使用python main.py运行flask应用
  5. 模拟受害者账户进行攻击测试

注意事项

  • 受害者需已登录WakaTime
  • 双击按钮可能未完美对齐,但可通过调整attack.html中的按钮位置实现
  • 测试环境:Firefox Browser 140.0.2 (64-bit), Windows

修复建议

通过默认禁用关键按钮来消除双重点击劫持风险,除非检测到用户手势(如移动鼠标或使用键盘)。

影响范围

此漏洞允许攻击者诱骗已登录的WakaTime用户在不知情的情况下授权攻击者创建的第三方应用,攻击者可获取访问令牌并从WakaTime API获取资源(取决于权限范围)。攻击者可获得的最大权限为所有范围,详见https://wakatime.com/developers。

参考资料

时间线

  • 报告时间:2025年8月5日 14:08 UTC
  • 修复时间:2025年8月5日 23:25 UTC
  • 严重等级:中(4-6.9)
  • 弱点类型:安全设计原则违反
  • 赏金:无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计