报告编号:B6-2019-082301

报告来源:360-CERT

报告作者:360-CERT

更新日期:2019-08-23

0x00 漏洞背景

2019年8月22日,趋势科技研究团队发布了编号为CVE-2019-12527的Squid代理服务器缓冲区溢出漏洞分析报告,攻击者可以在无需身份验证的情况下构造数据包利用此漏洞造成远程代码执行。

Squid 是一款受欢迎的开源代理服务器和缓存应用,支持HTTP、HTTPS、FTP等多种网络协议,使用广泛。

0x01 漏洞详情

cachemgr.cgi 是 Squid 的缓存管理界面,用于展示代理进程的统计信息。Squid 使用 CacheManager::ParseHeaders() 函数来处理针对 cachemgr 的请求信息,如果请求投中包含Authorization认证信息,且类型为Basic的情况下,会调用存在漏洞的函数HttpHeader::getAuth()

HttpHeader::getAuth()函数定义decodedAuthToken数组大小为8192字节,用于存放base64解码之后的凭证。

使用函数base64_decode_update进行解码

base64_decode_update(&ctx, &decodedLen, reinterpret_cast<uint8_t*>(decodedAuthToken), strlen(field), field) 

如果解码的结果超过 8192 字节,那么就会发生缓冲区溢出。

原有逻辑:静态定义decodeDAuthToken 大小 8192字节补丁修复:通过base64解码后动态定义存储长度 

无需认证的远程攻击者可以通过向目标服务器发送精心设计的HTTP请求来利用此漏洞。利用利用将导致攻击者获得代码执行权限,攻击不成功将导致服务器进程异常终止。

当Squid用作FTP代理并且请求的uri以FTP开头的时候,也会调用漏洞函数HttpHeader::getAuth()

0x02 影响版本

Squid 4.0.23 -> 4.7

0x03 修复建议

Squid 已确认受到影响并发布补丁,升级到最新版本 Squid 4.8

对于不便更新的用户可以使用 --disable-auth-basic 重新编译 Squid

或者禁止访问缓存管理报告和使用FTP协议的代理

acl FTP proto FTPhttp_access deny FTPhttp_access deny manager 

0x04 时间线

2019-07-12 Squid官方发布安全公告

2019-08-22 趋势科技发布研究报告

2019-08-23 360-CERT发布漏洞预警

0x05 参考链接

  1. https://www.thezdi.com/blog/2019/8/22/cve-2019-12527-code-execution-on-squid-proxy-through-a-heap-buffer-overflow
  2. http://www.squid-cache.org/Advisories/SQUID-2019_5.txt
  3. https://github.com/squid-cache/squid/commit/7f73e9c5d17664b882ed32590e6af310c247f320

声明:本文来自360CERT,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。