curl FTP协议内存泄漏漏洞分析(含代理复用场景)

本文详细分析了curl在FTP协议处理过程中存在的内存泄漏问题,特别是在代理连接复用场景下。包含漏洞复现步骤、堆栈跟踪信息和修复方案,涉及curl-fuzzer模糊测试技术。

curl FTP协议内存泄漏分析报告

漏洞概述

存在FTP协议相关的内存泄漏问题(参见复现步骤和堆栈跟踪) 该漏洞通过使用 https://github.com/catenacyber/curl-fuzzer/tree/proxy 进行模糊测试发现(在修复了curl中的一个小内存泄漏之后)

受影响版本

curl 8.13.0-DEV (x86_64-apple-darwin23.6.0) libcurl/8.13.0-DEV OpenSSL/1.0.2n zlib/1.2.11 libidn2/2.0.4 libpsl/0.19.1 nghttp2/1.55.1 librtmp/2.3

复现步骤

运行附带的模糊测试复现器,使用以下目标构建:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
diff --git a/projects/curl/Dockerfile b/projects/curl/Dockerfile
index 1dc106a53..23245c9bf 100644
--- a/projects/curl/Dockerfile
+++ b/projects/curl/Dockerfile
@@ -16,11 +16,11 @@
 
 FROM gcr.io/oss-fuzz-base/base-builder
 
-RUN git clone --depth 1 https://github.com/curl/curl.git /src/curl
-RUN git clone --depth 1 https://github.com/curl/curl-fuzzer.git /src/curl_fuzzer
+RUN git clone --depth 1 --branch dummy https://github.com/catenacyber/curl.git /src/curl
+RUN git clone --depth 1 --branch proxy https://github.com/catenacyber/curl-fuzzer.git /src/curl_fuzzer
 
 # Use curl-fuzzer's scripts to get latest dependencies.
 RUN $SRC/curl_fuzzer/scripts/ossfuzzdeps.sh
 
 WORKDIR $SRC/curl_fuzzer

技术分析

从堆栈跟踪可以看出,存在17字节的直接内存泄漏:

1
2
3
4
5
Direct leak of 17 byte(s) in 1 object(s) allocated from:
    #0 0x55ce0ef26f0f in malloc /src/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:68:3
    #1 0x55ce0ef92cb7 in curl_dbg_malloc /src/curl/lib/memdebug.c:146:9
    #2 0x55ce0ef92cb7 in curl_dbg_strdup /src/curl/lib/memdebug.c:200:9
    #3 0x55ce0f093870 in ftp_setup_connection /src/curl/lib/ftp.c:4381:21

问题出现在FTP连接处理过程中,存在两个struct connectdata *conn连接结构,第一个连接通过ftp_disconnect清理,但第二个连接(来自代理复用)即使它在ftp_setup_connection中分配了资源也没有被正确清理。

影响评估

该内存泄漏规模较小且出现频率较低,不被视为安全问题,属于常规bug范畴。

修复状态

curl开发团队已提交修复PR:https://github.com/curl/curl/pull/16604 该问题已在常规问题跟踪器中处理,不作为安全漏洞处理。

时间线

  • 2025年3月5日:漏洞报告提交
  • 2025年3月7日:漏洞确认并修复
  • 2025年7月1日:报告公开披露

状态:已修复(Informative) 严重程度:无(0.0) CVE ID:无 赏金:无

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计