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:无
赏金:无