【安全警报】curl 7.77.0 漏洞分析 (CVE-2025-15079)
漏洞概述
近日,libcurl 项目发布了重要安全公告,披露了一个编号为 CVE-2025-15079 的中危漏洞。该漏洞影响 curl 7.77.0 及以下版本,涉及 SSH 传输模块中的证书主机名验证机制存在缺陷,可能导致中间人攻击(MITM)的风险增加。
漏洞等级:Medium(中危)
影响版本:curl <= 7.77.0
漏洞类型:Improper Validation of Certificate with Host Mismatch(证书主机名验证不当)
技术背景
libcurl 是一个被广泛应用于各类软件和系统中的多协议文件传输库,支持 HTTP、HTTPS、FTP、SFTP、SCP 等数十种协议。SSH 协议传输功能(SFTP/SCP)是其重要的企业级特性,广泛应用于自动化脚本、CI/CD 流程、服务器管理等场景。
在使用 SSH 传输时,libcurl 支持通过 known_hosts 文件来验证远程服务器的主机密钥,这是防止中间人攻击的关键安全机制。当用户连接到一个 SSH 服务器时,libcurl 会检查服务器提供的主机密钥是否与 known_hosts 文件中记录的指纹匹配,从而确保连接的真实性和安全性。
漏洞详情
问题描述
在受影响的 curl 版本中,当使用 SCP 或 SFTP 协议进行文件传输,并指定了 known_hosts 文件进行主机验证时,存在一个主机名验证绕过的问题。
具体而言,漏洞允许以下攻击场景:
- 正常连接流程:客户端请求连接
example.com服务器,服务器返回其主机密钥 - 攻击者介入:攻击者位于客户端与服务器之间,拦截连接并返回自己的主机密钥
- 验证绕过:由于主机名验证逻辑存在缺陷,即使攻击者返回的主机密钥与
known_hosts中记录的不一致,验证仍可能通过
根本原因
根据漏洞描述,问题出在 Improper Validation of Certificate with Host Mismatch(证书与主机名不匹配时的验证不当)。在 SSH 传输的握手过程中,主机名验证和密钥验证的执行顺序或逻辑判断存在漏洞,导致:
- 即使服务器返回的证书/密钥与连接目标的主机名不匹配
- libcurl 仍可能接受该连接并完成文件传输
- 这使得攻击者可以伪装成目标服务器进行中间人攻击
风险评估
| 风险维度 | 评估结果 | |---------|---------| | 机密性 | 高风险 - 传输数据可被攻击者窃取 | | 完整性 | 高风险 - 传输数据可被篡改 | | 可用性 | 中风险 - 可能导致连接异常或拒绝服务 | | 利用复杂度 | 中等 - 需要处于网络中间位置 | | 影响范围 | 使用 SSH 传输且配置了 known_hosts 的应用 |
影响版本
以下 curl 版本受到影响,建议立即排查并升级:
- curl 7.77.0
- curl 7.76.0 - 7.76.x
- curl 7.75.0 - 7.75.x
- curl 7.74.0 - 7.74.x
- 以及所有更早的受影响版本
受影响功能模块:
- SFTP(SSH File Transfer Protocol)
- SCP(Secure Copy Protocol)
不受影响的功能:
- HTTPS 传输(使用独立的 TLS 验证机制)
- FTP、HTTP 等其他协议
漏洞验证
运维人员可通过以下方式检查当前使用的 curl 版本:
# 检查 curl 版本
curl --version
# 检查 libcurl 版本
ldd /usr/bin/curl | grep curl
如果版本号小于 7.77.0 且大于等于 7.0.0,建议立即采取应对措施。
修复方案
方案一:升级 curl(推荐)
升级到 curl 7.77.1 或更高版本,该版本已修复主机名验证漏洞。
# Ubuntu/Debian
sudo apt update && sudo apt upgrade curl
# CentOS/RHEL
sudo yum update curl
# macOS (Homebrew)
brew upgrade curl
# 源码编译安装
wget https://curl.se/download/curl-7.88.1.tar.gz
tar -xzf curl-7.88.1.tar.gz
cd curl-7.88.1
./configure --prefix=/usr/local
make && sudo make install
方案二:临时缓解措施
如果无法立即升级,可采取以下临时防护措施:
- 避免使用 SSH 传输敏感数据:暂时使用其他安全的文件传输方式
- 使用强认证:配合 SSH 公钥认证而非密码认证
- 网络层防护:限制可发起 SSH 连接的来源 IP
- 启用连接日志监控:密切关注 SSH 传输行为的异常
方案三:应用层加固
# 确保 known_hosts 文件权限正确
chmod 600 ~/.ssh/known_hosts
# 使用 StrictHostKeyChecking 选项
# 在 curl 命令中虽然不直接支持,但可在 ssh_config 中配置
echo "StrictHostKeyChecking yes" >> ~/.ssh/config
总结与建议
CVE-2025-15079 是影响 libcurl SSH 传输模块的中危漏洞,核心问题在于证书主机名验证不当,可能导致中间人攻击风险。对于企业级应用和使用了自动化脚本进行 SFTP/SCP 文件传输的系统,建议:
- 立即排查当前环境中的 curl 版本
- 优先升级到 curl 7.77.1 或更高版本
- 对于无法立即升级的系统,评估并实施临时缓解措施
- 持续监控安全公告,关注后续可能的相关补丁
安全无小事,建议各团队尽快响应,确保系统安全性不受该漏洞影响。
参考来源:curl 官方安全公告、MITRE CVE 数据库
编写时间:2025年1月
评论 (0)