Dulwich SSH 主机密钥校验缺失CVE-2026-38974
Dulwich是纯Python编写的Git开发库,无需系统预装Git客户端,就可以代码读写本地、远程Git仓库,完整实现Git底层文件与网络协议。
一、基本情况
Dulwich支持clone、commit、push、分支、标签等全套Git操作,可选 Rust 扩展提速,适合无Git环境、自动化脚本、嵌入式程序使用。
Dulwich 是纯 Python 实现的 Git 协议与仓库操作库,自带高低两层API,对比GitPython、pygit2,优势是零外部依赖、跨平台易打包。

Dulwich 在Windows、Linux、macOS、嵌入式 Python 环境全部通用,零外部依赖、跨平台易打包,但是原生纯Python运行速度偏弱。
栋科技漏洞库关注到Dulwich存在的SSH主机密钥校验缺失漏洞,漏洞现在已经被追踪为CVE-2026-38974,漏洞CVSS 3.X评分为5.3。
二、漏洞分析
CVE-2026-38974漏洞是纯 Python Git 库 Dulwich 1.1.0 及以下所有版本中的安全漏洞,该漏洞路径为contrib/paramiko_vendor.py。
由于使用SSH协议拉取/推送Git仓库时代码完全未校验服务端主机密钥,缺少身份核验逻辑,攻击者可实施中间人攻击伪造Git服务端。
具体来说,由于ulwich contrib/paramiko_vendor.py 的 ParamikoSSHVendor.run_command 在建立 SSH 连接前,
未调用 load_system_host_keys 或 load_host_keys 加载任何 known_hosts,
并使用 paramiko.client.MissingHostKeyPolicy() 处理未知主机密钥,导致服务器主机密钥不会与本地已知指纹进行比对;
攻击者在具备网络中间人位置的情况下,可向客户端呈现任意主机密钥并完成 SSH 握手,
从而在用户通过 Dulwich 进行 git fetch、git clone、git push 等 SSH 操作时窃取凭证或篡改 Git 传输内容。
修复版本中通过在 ParamikoSSHVendor.run_command 中新增 _load_host_keys 方法,
先调用 client.load_system_host_keys(),再依据 SSH 配置 globalknownhostsfile 与 userknownhostsfile 加载用户 known_hosts 文件,
随后将客户端策略改为 paramiko.RejectPolicy(),拒绝任何未匹配已知主机密钥的服务器,
从根本上切断主机密钥校验缺失导致的中间人攻击链路。
三、影响范围
Dulwich ≤ 1.1.0
四、修复建议
Dulwich>1.1.0
五、参考链接
管理员已设置登录后刷新可查看