CVE-2019-12527:Squid缓冲区溢出导致远程代码执行

 

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 FTP
http_access deny FTP
http_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


发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注