报告编号: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 FTP
http_access deny FTP
http_access deny manager
0x04 时间线
2019-07-12 Squid官方发布安全公告
2019-08-22 趋势科技发布研究报告
2019-08-23 360-CERT发布漏洞预警
0x05 参考链接
- https://www.thezdi.com/blog/2019/8/22/cve-2019-12527-code-execution-on-squid-proxy-through-a-heap-buffer-overflow
- http://www.squid-cache.org/Advisories/SQUID-2019_5.txt
- https://github.com/squid-cache/squid/commit/7f73e9c5d17664b882ed32590e6af310c247f320
声明:本文来自360CERT,版权归作者所有。文章内容仅代表作者独立观点,不代表士冗科技立场,转载目的在于传递更多信息。如有侵权,请联系 service@expshell.com。