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_len 或 password_len 参数触发整数溢出,最终实现远程代码执行。
特点:
- 无需认证
- 无需用户交互
- 可通过网络远程触发
CVE-2026-58050:堆缓冲区溢出(CVSS 7.0)
libssh2 在处理 publickey-subsystem 响应中的 32 位属性计数时,直接使用攻击者控制的数值作为内存分配依据。如果 SSH 服务器发送了远超实际的属性数量,会触发堆缓冲区写入越界。
其他相关漏洞
- CVE-2025-15661:SFTP
sftp_symlink()函数中的越界堆读取,可能导致内存信息泄露或崩溃
三、影响面分析谁在用 libssh2?
- curl——世界上使用最广泛的 HTTP 工具,SSH 后端默认可用
- Git——版本控制系统,SSH 传输层
- PHP——SSH2 扩展
- libcurl——嵌入式设备常用的网络库
- 众多 Linux 发行版——作为基础库被静态或动态链接
最危险场景
静态链接的噩梦。 许多软件将 libssh2 静态编译进去,这意味着即使系统包管理器更新了 libssh2,这些静态链接的程序依然保留着漏洞版本。
这是一个长期存在的软件供应链问题。无法通过 apt upgrade 解决。
四、缓解与修复官方补丁状态
libssh2 项目已经在主线开发分支中合并了修复补丁,受影响的版本为 libssh2 ≤ 1.11.1。
你需要做什么
- 更新系统库:
apt update && apt upgrade libssh2-1(Debian/Ubuntu) - 识别静态链接的程序:使用
ldd或strings检查 - 更新 curl:
curl——version查看 libssh2 版本 - 更新 PHP:
php -m | grep ssh2 - 清理 Git SSH 配置:检查使用 libssh2 后端的 Git 客户端
- 网络层缓解:严格限制 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() 整数溢出)。六年后再次出现同类问题,说明:
- 代码审查不足——关键的数据包解析函数没有足够的安全审查
- 单元测试缺失——针对边界条件的 fuzz 测试不到位
- 架构性缺陷——函数设计本身没有防御性思维
对一个已经存活了近 20 年的底层库来说,这种\"旧伤复发\"是不该发生的。也许 libssh2 项目需要一场真正的安全审计,而不是点对点的补丁修复。
六、写在最后
libssh2 的教训不仅是开发者的,也是运维者和所有软件用户的:
- 不要盲目相信底层库——哪怕是最成熟的库也可能有致命漏洞
- 关注软件供应链——静态链接是把双刃剑
- CVSS 9.2 不是开玩笑的——尽快修复
作为系统管理员和开发者的我们,今天就应该去检查自己的系统和服务。等你明天再想起,可能已经有人在用 PoC 扫描你的基础设施了。
━━━ ━━━ ━━━
后记: 本文发布于 CVE-2026-55200 等漏洞公开披露当日。截至发文时,libssh2 主线已包含修复,但各发行版打包分发尚需时间。请关注 libssh2 官方仓库和你的发行版安全公告。
━━━ ━━━ ━━━
*欢迎关注 LeisureLinux,获取更多深度技术解读。*
【技术预警】SSHStalker 僵尸网络:深挖 16 年前的内核漏洞,正在收割 Linux "遗忘资产"