前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Haxx curl相关漏洞修复参考

Haxx curl相关漏洞修复参考

原创
作者头像
陈捷
发布2021-12-17 01:25:22
3.2K0
发布2021-12-17 01:25:22
举报
文章被收录于专栏:安全产品参考安全产品参考

Haxx curl/libcurl 安全漏洞修复参考

libcurl是一个免费,易用的客户端传输库,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP等协议。libcurl支持SSL认证,HTTP POST, HTTP PUT, FTP 上传, HTTP form based upload, proxies, cookies,用户名+密码认证(Basic, Digest, NTLM, Negotiate, Kerberos),文件断点续传,http代理转发。

低版本的libcurl存在较多低危、中危安全漏洞,如CVE-2020-8284、CVE-2020-8285、CVE-2020-8286

部分漏洞的原因

  • 1、CVE-2020-8284

当 curl 执行被动 FTP 传输时,会首先尝试该EPSV命令,如果不支持该命令,则回退到使用PASV,而服务器对PASV命令的响应包括 (IPv4) 地址和端口号,供客户端连接以执行实际数据传输。

攻击者可以恶意利用针对curl的FTP PASV响应来绕过对数据的访问限制,获取敏感信息

  • 2、 CVE-2020-8285

libcurl 提供通配符匹配功能CURLOPT_CHUNK_BGN_FUNCTION当 libcurl 遍历所有可用条目的列表时,该功能允许回调,将有关如何处理目录中的特定条目信息返回给 libcurl。

当此回调返回时,CURL_CHUNK_BGN_FUNC_SKIP功能会告诉 libcurl 不处理该文件,然后libcurl中的内部函数递归调用自身以处理下一个目录条目。

如果有足够数量的文件条目并且回调返回“跳过”的次数足够多时,则 libcurl 会耗尽堆栈空间。(确切的数量和平台架构、编译器因素有关)

攻击者会利用此机制,控制覆盖堆栈的数据,造成拒绝服务

  • 3、CVE-2020-8286

libcurl 通过CURLOPT_SSL_VERIFYSTATUS选项提供“OCSP Stapling”功能(客户端向服务端发起 SSL 握手请求时,服务器将证书的 OCSP 信息随证书链一同发送给客户端,已提升OCSP访问性能) 。设置后,libcurl 验证服务器可作为 TLS 握手的一部分来响应 OCSP,但是 libcurl 在构建或被告知使用 OpenSSL 作为 TLS 后端时,客户端并未验证正确的证书设置,此缺陷将允许攻击进行欺诈性的 OCSP 响应,而不是真实响应(类似中间人欺骗),导致弱身份验证成功

针对低版本的libcurl,官方已经在新版的curl源码中,进行了修复(日志:https://github.com/curl/curl/commit/d9d01672785b),如下图:

这里介绍通过源码编译高版本curl的方式,对libcurl进行升级,来修复安全漏洞

0、备份服务器

如为云服务器,建议先备份服务器快照或镜像,避免升级的版本和之前业务不兼容导致服务出现异常

1、编译安装较高版本curl

如下命令:

代码语言:txt
复制
wget https://curl.se/download/curl-7.80.0.tar.gz --no-check-certificate #下载官方源码包
#解压缩、编译安装
tar -xzvf curl-7.80.0.tar.gz 
cd curl-7.80.0
./configure --with-openssl
make -j4 && make install  #默认安装位置在/usr/local/bin/curl
#查看安装后的版本
/usr/local/bin/curl -V

2、卸载低版本的curl

如下命令:

代码语言:txt
复制
#ubuntu操作系统
apt remove curl -y #卸载旧版本curl
ln -s  /usr/local/bin/curl /usr/bin/curl #添加编译的高版本curl到环境变量
#centos操作系统
yum remove curl -y #卸载旧版本curl
ln -s  /usr/local/bin/curl /usr/bin/curl #添加编译的高版本curl到环境变量

3、避“坑”参考

3.1 编译报错

  • 编译时遇到报错 --with-openssl was given but OpenSSL could not be detected

解决方法:

代码语言:txt
复制
#安装openssl和openssl的库/头文件 包
#ubuntu操作系统,分开执行下面的命令
sudo apt install openssl
sudo apt install libssl-dev
#centos操作系统
yum -y install openssl openssl-devel
  • 编译时,报错/usr/bin/ld: cannot find crti.o: No such file or directory 或者 类似C compiler cannot create executables

原因:

早期旧版本的Ubuntu等操作系统,混合编译缺少支持,需要安装gcc-multilib

解决方法:

代码语言:txt
复制
sudo apt install gcc-multilib

3.2 新版本curl执行报错

  • 安装完成后,执行curl命令/usr/local/bin/curl -V报错 /usr/local/bin/curl: symbol lookup error: /usr/local/bin/curl: undefined symbol: curl_multi_poll

原因:

未找到动态库引用位置,需要添加动态库路径到系统动态库配置文件

解决方法:

代码语言:txt
复制
#添加动态库路径到系统动态库配置文件
echo "/usr/lib" >> /etc/ld.so.conf
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig -v && ldconfig /etc/ld.so.conf
#再次验证版本
/usr/local/bin/curl -V

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Haxx curl/libcurl 安全漏洞修复参考
    • 0、备份服务器
      • 1、编译安装较高版本curl
        • 2、卸载低版本的curl
          • 3、避“坑”参考
            • 3.1 编译报错
            • 3.2 新版本curl执行报错
        相关产品与服务
        多因子身份认证
        多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档