漏洞概述
cURL 是一个支持多种网络协议的开源项目,被广泛集成到自动化构建、网络测试、网络数据采集以及其他网络相关的任务中,备受开发者和系统管理员青睐。
cURL在2023年10月11日下午紧急发布最新版本来修复前几日发现的高危安全漏洞,其中编号为CVE-2023-38545的漏洞是cURL客户端在处理SOCKS5协议时存在的堆内存溢出漏洞。
漏洞复现
悬镜供应链安全实验室第一时间对该漏洞进行分析和复现,当使用存在CVE-2023-38545漏洞的curl客户端或libcurl库请求攻击者的恶意socks代理服务器时,攻击者可通过socks5服务器返回非法的协议数据来远程触发该堆内存溢出漏洞,如果能成功利用该漏洞,受害者主机系统可能存在被攻击者远程执行任意代码的风险。
复现结果如下所示(测试版本curl 8.3.0):
使用curl客户端访问攻击者搭建的恶意socks代理服务器(socks5h://random.test:1080)
curl接收到socks代理服务器的响应数据时触发内存崩溃,通过gdb内存调试可以发现curl进程的合法数据内存被攻击者发送的恶意数据覆盖导致进程崩溃。
受影响版本
CVE-2023-38545 socks协议内存溢出漏洞在libcurl 7.69.0被引入(https://github.com/curl/curl/commit/4a4b63daaa),在8.4.0版本中被修复,目前该漏洞只影响libcurl 7.69.0 ~ 8.3.0版本,不受漏洞影响的版本:libcurl < 7.69.0 和 >= 8.4.0。
漏洞补丁
cURL项目官方发布了CVE-2023-38545的漏洞补丁如下
https://github.com/curl/curl/commit/fb4415d8aee6c1
在修复补丁中,当cURL客户端发现socks5代理服务器返回的http重定向hostname长度大于255时,则直接抛出异常(SOCKS5: the destination hostname is too long to be resolved remotely by the proxy.)。
修复建议
- 禁止使用存在漏洞版本的curl客户端或libcurl库连接不信任的socks代理服务器
- 升级到最新版本8.4.0
*ps:可以关注下容器中cURL的默认版本
该漏洞利用难度较高,用户可酌情选择是否升级到最新版本
悬镜供应链安全实验室也将持续监测和挖掘未知的开源组件安全风险,并及时对相关风险进行分析披露。