IPBUF安全漏洞报告
English
CVE-2026-33468 CVSS 8.1 高危

CVE-2026-33468 Kysely SQL注入漏洞

披露日期: 2026-03-26

漏洞信息

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

相关标签

SQL注入KyselyTypeScriptMySQLCVE-2026-33468高危漏洞

漏洞概述

Kysely是一个类型安全的TypeScript SQL查询构建器。在0.28.14版本之前,其`sanitizeStringLiteral`函数存在缺陷,未对反斜杠进行转义。攻击者可利用MySQL默认转义机制绕过过滤,在`CreateIndexBuilder`等组件中注入任意SQL代码,造成严重安全风险。

技术细节

该漏洞源于Kysely的`DefaultQueryCompiler.sanitizeStringLiteral()`方法实现不当。该方法仅将单引号加倍(' -> '')以防止逃逸,却忽略了反斜杠(\)的处理。在MySQL方言中,默认开启`NO_BACKSLASH_ESCAPES`为OFF,此时反斜杠被视为转义字符。当攻击者输入包含反斜杠的恶意数据(例如`\'`)时,生成的SQL语句中,反斜杠会转义紧跟的单引号,导致原本用于闭合字符串的单引号失效。攻击者借此闭合字符串并追加任意SQL命令。此漏洞主要影响使用`ImmediateValueTransformer`内联值的代码路径,特别是`CreateIndexBuilder.where()`和`CreateViewBuilder.as()`方法。

攻击链分析

STEP 1
侦察
攻击者确认目标应用使用了Kysely库且版本低于0.28.14,并且后端数据库为MySQL(默认配置)。
STEP 2
构造载荷
攻击者构造包含反斜杠和单引号的恶意Payload(例如 `\' OR 1=1 --`),旨在利用反斜杠转义后续的单引号。
STEP 3
注入
将Payload传递给受影响的代码路径,如`CreateIndexBuilder.where()`或`CreateViewBuilder.as()`。
STEP 4
执行
由于`sanitizeStringLiteral`未过滤反斜杠,数据库解析时引号被逃逸,导致攻击者拼接的SQL语句被执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Proof of Concept for CVE-2026-33468 // Demonstrating the bypass of sanitization using backslash function vulnerableSanitize(str) { // Kysely < 0.28.14 logic: escapes single quotes but ignores backslashes return "'" + str.replace(/'/g, "''") + "'"; } // Attacker input containing a backslash const payload = "\\'; DROP TABLE users; --"; const sanitized = vulnerableSanitize(payload); console.log("Sanitized SQL Fragment:", sanitized); // Resulting SQL in MySQL: // WHERE col = '\''; DROP TABLE users; --' // The backslash escapes the second quote, breaking out of the string literal.

影响范围

Kysely < 0.28.14

防御指南

临时缓解措施
如果无法立即升级,应严格审查并限制传递给`CreateIndexBuilder.where()`和`CreateViewBuilder.as()`的数据来源。建议在应用层对所有用户输入进行额外的清洗,移除或转义反斜杠字符,或者在数据库配置中启用`NO_BACKSLASH_ESCAPES`模式以阻断此类利用。

参考链接

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