← LeisureLinux 文章索引
LeisureLinux · 微信公众号文章

libssh2 漏洞深度解读:SSH 库的“重症监护室”时刻

安全/漏洞 阅读原文(微信)↗

TL;DR: CVE-2026-55200(CVSS 9.2)远程代码执行、CVE-2026-55199(CVSS 8.2)拒绝服务、CVE-2026-7598(远程代码执行)、CVE-2026-58050(堆溢出),影响 libssh2 ≤ 1.11.1 所有版本。curl、Git、PHP、OpenSSH 等几乎所有依赖 libssh2 的项目都处于风险之中。

一、背景:libssh2 是谁?

libssh2 是一个用 C 语言编写的 SSH2 协议客户端库。和 OpenSSH 不同,libssh2 不是 SSH 服务器,而是——它为 curl、Git、PHP、libcurl 等上层软件提供 SSH 连接能力。

你日常用的 git clone git@github.com:xxx,如果走的是 libssh2 后端,那就在它覆盖范围内。据统计,libssh2 被数百个开源项目依赖,影响数以亿计的终端设备。

然而 2026 年 6 月,libssh2 迎来了它的\"黑色六月\"——四枚新高危漏洞同时公开(含 PoC),直击这个基础库的心脏。

二、漏洞全景CVE-2026-55200:最致命的 RCE(CVSS 9.2)

这是本批漏洞中最严重的一枚。它是一个越界写入漏洞,发生在 ssh2_transport_read() 函数中。

成因:

  • 在 SSH 握手阶段,libssh2 需要解析服务器发回的 packet_length 字段
  • 由于整数溢出,当攻击者控制恶意 SSH 服务器发送特制的包时,客户端分配的内存缓冲区过小,导致后续数据写入越界
  • 攻击者可以无需凭证、无需用户交互,仅通过让目标连接恶意 SSH 服务器即可触发 RCE

有意思的是,这个 bug 的根源和 2019 年修复的 CVE-2019-3855 非常相似。同一个函数同一类问题,六年后再次出现——说明之前的修复只是\"打补丁\"而非\"改架构\"。

目前公开 PoC 已经发布。

CVE-2026-55199:CPU 耗尽型 DoS(CVSS 8.2)

这是一个预认证阶段的拒绝服务漏洞,发生在 SSH_MSG_EXT_INFO 消息处理中。

成因:

  • _libssh2_get_string() 的返回值未做校验
  • 结合会话超时机制不适用于 CPU 密集型循环
  • 攻击者可以让客户端在密钥交换阶段陷入无限 CPU 循环

CVSS 8.2,高严重性。

CVE-2026-7598:认证阶段 RCE

这个漏洞发生在 userauth_password 函数。攻击者可以通过操纵 username_lenpassword_len 参数触发整数溢出,最终实现远程代码执行。

特点:

  • 无需认证
  • 无需用户交互
  • 可通过网络远程触发

CVE-2026-58050:堆缓冲区溢出(CVSS 7.0)

libssh2 在处理 publickey-subsystem 响应中的 32 位属性计数时,直接使用攻击者控制的数值作为内存分配依据。如果 SSH 服务器发送了远超实际的属性数量,会触发堆缓冲区写入越界。

其他相关漏洞

  • CVE-2025-15661:SFTP sftp_symlink() 函数中的越界堆读取,可能导致内存信息泄露或崩溃

三、影响面分析谁在用 libssh2?

  1. curl——世界上使用最广泛的 HTTP 工具,SSH 后端默认可用
  2. Git——版本控制系统,SSH 传输层
  3. PHP——SSH2 扩展
  4. libcurl——嵌入式设备常用的网络库
  5. 众多 Linux 发行版——作为基础库被静态或动态链接

最危险场景

静态链接的噩梦。 许多软件将 libssh2 静态编译进去,这意味着即使系统包管理器更新了 libssh2,这些静态链接的程序依然保留着漏洞版本。

这是一个长期存在的软件供应链问题。无法通过 apt upgrade 解决。

四、缓解与修复官方补丁状态

libssh2 项目已经在主线开发分支中合并了修复补丁,受影响的版本为 libssh2 ≤ 1.11.1

你需要做什么

  1. 更新系统库apt update && apt upgrade libssh2-1(Debian/Ubuntu)
  2. 识别静态链接的程序:使用 lddstrings 检查
  3. 更新 curlcurl——version 查看 libssh2 版本
  4. 更新 PHPphp -m | grep ssh2
  5. 清理 Git SSH 配置:检查使用 libssh2 后端的 Git 客户端
  6. 网络层缓解:严格限制 SSH 客户端只连接可信任的 SSH 服务器

检查命令

# 检查系统 libssh2 版本
dpkg -l | grep libssh2

# 检查 curl 使用的 SSH 后端
curl --version | grep -i ssh

# 检查特定程序是否静态链接 libssh2

strings /usr/bin/program | grep libssh2

# 检查 PHP SSH2 扩展
php -m | grep ssh2

五、技术深潜:CVE-2026-55200 的复现思考

从历史来看,libssh2 曾经在 2019 年出现过几乎一模一样的漏洞(CVE-2019-3855,ssh2_transport_read() 整数溢出)。六年后再次出现同类问题,说明:

  1. 代码审查不足——关键的数据包解析函数没有足够的安全审查
  2. 单元测试缺失——针对边界条件的 fuzz 测试不到位
  3. 架构性缺陷——函数设计本身没有防御性思维

对一个已经存活了近 20 年的底层库来说,这种\"旧伤复发\"是不该发生的。也许 libssh2 项目需要一场真正的安全审计,而不是点对点的补丁修复。

六、写在最后

libssh2 的教训不仅是开发者的,也是运维者和所有软件用户的:

  • 不要盲目相信底层库——哪怕是最成熟的库也可能有致命漏洞
  • 关注软件供应链——静态链接是把双刃剑
  • CVSS 9.2 不是开玩笑的——尽快修复

作为系统管理员和开发者的我们,今天就应该去检查自己的系统和服务。等你明天再想起,可能已经有人在用 PoC 扫描你的基础设施了。

━━━ ━━━ ━━━

后记: 本文发布于 CVE-2026-55200 等漏洞公开披露当日。截至发文时,libssh2 主线已包含修复,但各发行版打包分发尚需时间。请关注 libssh2 官方仓库和你的发行版安全公告。

━━━ ━━━ ━━━

*欢迎关注 LeisureLinux,获取更多深度技术解读。*

【技术预警】SSHStalker 僵尸网络:深挖 16 年前的内核漏洞,正在收割 Linux "遗忘资产"

哪吒监控连环漏洞:CVSS 9.1 的文件读取,你的服务器可能正在裸奔

【实用项目】Pangolin 1.16 发布:引入 SSH 身份验证守护进程,重塑隧道反向代理安全架构

本文整理自微信公众号 LeisureLinux 的原创内容(Linux / AI / 安全 硬核技术)。

· 阅读原文(微信公众号)

· 关注公众号 LeisureLinux,第一时间获取技术深度内容。

LeisureLinux 公众号二维码(微信扫一扫关注)