IPBUF安全漏洞报告
English
CVE-2026-41167 CVSS 9.1 严重

CVE-2026-41167 Jellystat SQL注入致远程代码执行漏洞

披露日期: 2026-04-22

漏洞信息

漏洞编号
CVE-2026-41167
漏洞类型
SQL注入
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Jellystat

相关标签

SQL注入RCEJellystatCVE-2026-41167PostgreSQL

漏洞概述

Jellystat是Jellyfin的开源统计工具。在1.1.10版本之前,其多个API端点存在SQL注入漏洞。攻击者需通过认证,向`/api/getUserDetails`或`/api/getLibrary`发送恶意构造的请求体,利用未清理的输入拼接到SQL语句中。由于支持堆叠查询且数据库拥有超级用户权限,攻击者不仅能窃取敏感配置,还能通过PostgreSQL特有功能实现远程代码执行,完全控制服务器。

技术细节

该漏洞的根本原因在于应用在处理`POST /api/getUserDetails`和`/api/getLibrary`请求时,未对用户输入进行充分的过滤,直接将其拼接到原始SQL查询字符串中。由于底层使用了`node-postgres`库的简单查询协议,未使用参数化查询,导致攻击者可以注入分号来实现堆叠查询。利用此特性,攻击者首先可以读取`app_config`表,获取管理员凭证和Jellyfin API密钥。更为关键的是,项目默认配置的PostgreSQL用户拥有超级用户权限,攻击者可以利用SQL注入调用`COPY ... TO PROGRAM`命令,在数据库宿主机上执行任意系统指令,从而将信息泄露升级为远程代码执行(RCE)。

攻击链分析

STEP 1
1. 获取认证
攻击者需要注册或获取一个有效的Jellystat用户账号(认证要求:PR:H)。
STEP 2
2. 发送恶意请求
攻击者向`/api/getUserDetails`或`/api/getLibrary`端点发送POST请求,在请求体参数中注入SQL payload。
STEP 3
3. 执行堆叠查询
后端将payload拼接到SQL语句并执行。由于未使用参数化查询,分号后的恶意SQL语句(堆叠查询)被数据库解析执行。
STEP 4
4. 提权与RCE
利用PostgreSQL超级用户权限,执行`COPY ... TO PROGRAM`指令,在操作系统层面执行任意命令,实现远程代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-41167 // Target: POST /api/getUserDetails // Description: Exploits SQL injection to execute a system command via PostgreSQL COPY TO PROGRAM const url = 'http://target-ip/api/getUserDetails'; const payload = { "userId": "1'; COPY (SELECT '') TO PROGRAM 'touch /tmp/pwned'; --" }; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer <valid_token>' // PR:H requires authentication }, body: JSON.stringify(payload) }).then(response => response.text()) .then(data => console.log(data)) .catch(error => console.error('Error:', error));

影响范围

Jellystat < 1.1.10

防御指南

临时缓解措施
建议立即将Jellystat升级到1.1.10版本以修复此漏洞。如果暂时无法升级,应严格限制对受影响API端点的网络访问,并确保数据库用户遵循最小权限原则,避免使用超级用户运行应用,以阻断通过`COPY ... TO PROGRAM`进行命令执行的路径。

参考链接

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