
Public PoC 已发布:Critical libssh2 CVE-2026-55200 客户端 SSH 漏洞
针对 libssh2 的 CVE-2026-55200 现已公开 PoC。该缺陷可让恶意或遭入侵的 SSH server 在连接中的 client 上触发 memory corruption,甚至可能执行 code。受影响版本至 1.11.1,CVSS 4.0 为 9.2。
针对 CVE-2026-55200 的 public proof-of-concept 现在已经发布。这是 libssh2 里的一个 critical flaw,可让恶意或遭入侵的 SSH server 在连接中的 client 上触发 memory corruption,并可能导致 code execution。无需 credentials,也无需 user interaction。这个 bug 影响所有直到并包括 1.11.1 的 release,CVSS 4.0 分数为 9.2。
libssh2 是 client-side SSH library,不是 server。这个区别很重要。它被嵌入在 curl、Git、PHP、backup agents、firmware updaters,以及大量 appliances 里。
任何链接它并会连到不受信任 SSH endpoint 的东西,都是潜在目标。很多这些副本是 statically linked,所以 distro package update 不会触及它们,而你也未必知道它们存在。
漏洞如何运作
这个 flaw 存在于 transport.c 里的 ssh2_transport_read(),也就是在 handshake 期间解析传入 SSH packets 的 function。它读取由 attacker 控制的 packet_length field,只拒绝小于 1 的值,从未强制设定上限。
size calculation 用 32-bit arithmetic 把 packet_length 加上几个较小的值,因此 0xffffffff 的长度会回绕成一个很小的数字。接着 libssh2 会为这个很小的数字分配 buffer,而后面的代码却会把完整、过大的 packet 写进去。
结果就是 out-of-bounds heap write,归类为 CWE-680,integer overflow to buffer overflow,这是一个经典的 code execution primitive。修复方案补上了缺失的检查:在计算之前拒绝任何高于 LIBSSH2_PACKET_MAXPAYLOAD 的 packet_length。
libssh2 之前也曾踩过这个问题。2019 年,它发布 1.8.1 来修复一批九个漏洞,其中由 CVE-2019-3855 领头;那也是一个几乎相同的 transport read integer overflow,同样允许恶意 server 在连接中的 client 上运行 code。七年后,同一类 bug 又回到同一段 code 里。
Security researcher Tristan Madani 报告了这个问题。maintainers 已在 6 月 12 日通过 pull request #2052 合并 patch。VulnCheck 于 6 月 17 日发布了这个 CVE。
一个 public proof-of-concept 已发布在 “exploitarium” 上,这是一个 GitHub exploit code archive,作者表示里面的条目是在没有先行报告的情况下发布的。这个 archive 包含一个本地验证过的 SSH trigger scaffold,以及一个针对 libssh2 bug 的受控本地 RCE harness,而不是现成可直接使用的 remote exploit。要对真实运行的 application 达成可靠的 code execution,仍然取决于目标 binary、allocator 行为、mitigations,以及软件怎样嵌入 libssh2。
这个背景值得斟酌。作者承认这个 archive 发布时并不完整,部分条目较弱,而且 fuzzing 是由 AI 驱动。到目前为止,CISA 对这个 CVE 的 exploitation rating 仍显示 none,也没有 in-the-wild 使用的报告。
接下来要做什么
目前还没有修复后的 libssh2 release。patch 已经在 mainline source 里,而 tagged release 仍在准备中,所以 Linux distributions 和 downstream projects 正在自行 backport;举例来说,Debian 在 testing 里已经有修复后的 build。
NHS England Digital 已发布 advisory,敦促受影响组织更新。
盘点所有链接 libssh2 的东西,包括 package managers 不会标记出来的 static 或 bundled copies。curl、Git 和 PHP deployments 都是常见载体。
应用包含 commit 97acf3d 的 build,无论是 distro backport 还是 patched source build,并关注你的 vendor advisory channel 了解 release 状态。
在打补丁之前,将 outbound SSH connections 限制到受信任的 servers,并验证 host keys。优先处理那些连接 external SSH servers,或通过 attacker 可能重定向的名字来解析 hosts 的 clients。留意 oversized-packet 异常和无法解释的 client crashes。
也要把这一批的其余问题一并修补:CVE-2026-55199(CVSS 8.2),这是一个 denial of service,会通过伪造的 extension count 让连接中的 client 陷入 CPU loop;以及 CVE-2025-15661(CVSS 8.3),这是一个 SFTP heap over-read。
核心问题是一个 pre-auth memory-corruption bug,存在于比任何人完全绘制出来的范围更多的 clients 和 appliances 内部所搭载的 code 中。
真正悬而未决的问题是:有人会多快把这个 local harness 转成可靠的 remote exploit,以及有多少 bundled copies 会因为没人记得它们曾经把 libssh2 打包进去,而继续保持 vulnerable。