写点什么

libcurl FTP 路径规范化漏洞解析:编码 %2e%2e 导致目录穿越

作者:qife122
  • 2025-11-19
    福建
  • 本文字数:1034 字

    阅读完需:约 3 分钟

libcurl FTP 路径规范化漏洞分析

漏洞概述

libcurl 在处理 FTP 路径时存在安全漏洞,FTP 路径中的 URL 编码序列%2e%2e被解码为..后,未进行规范化路径处理,导致攻击者可通过特制 URL 实现目录穿越(Path Traversal)。

技术细节

漏洞位置

ftp_parse_url_path函数位于lib/ftp.c中,该函数:


  • 对 FTP 路径段进行 URL 解码(如%2e%2e

  • 使用特定循环将解码后的路径分割为组件

  • 跳过由//产生的空组件

  • 未执行规范化路径处理(无基于堆栈的...处理)

漏洞原理

编码的遍历序列如%2e%2e解码为..后,成为正常路径组件,导致 libcurl 向远程 FTP 服务器发送CWD ..命令。这使得在攻击者能够向使用 libcurl 的应用程序提供 FTP URL 的情况下,可实现客户端驱动的目录遍历。

受影响版本

curl 8.4.0 (x86_64-pc-linux-gnu) libcurl/8.4.0

复现步骤

环境准备

mkdir -p ~/curl-test/dir ~/curl-test/testdirecho "INSIDE" > ~/curl-test/dir/inside.txtecho "OUTSIDE" > ~/curl-test/testdir/outside.txtcd ~/curl-test
复制代码

启动 FTP 服务器

python3 -m pip install pyftpdlibpython3 -m pyftpdlib -w
复制代码

执行漏洞利用

curl --trace-ascii curl_trace.txt -v "ftp://127.0.0.1:2121/dir//%2e%2e/testdir" 2>&1 | tee curl_stdout.txt
复制代码

跟踪结果

curl_trace.txt中观察到的 CWD 命令:


CWD dir< 250 "/dir" is the current directory.CWD ..< 250 "/" is the current directory.
复制代码

影响分析

安全弱点

  • 路径遍历(CWE-22)

  • 不当输入验证(CWE-20)

攻击场景

  1. 远程文件泄露:攻击者可构造 URL 使 libcurl 遍历到父目录并尝试访问预期目录外的文件

  2. 客户端过滤器绕过:执行简单清理(如搜索字面..)的应用程序可被编码等效项(%2e%2e)绕过

  3. 供应链和自动化滥用:自动处理 FTP URL 的软件可能被诱骗获取或覆盖允许区域外的文件

严重程度

建议严重性:高 CVSS 示例向量:AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N → CVSS ~7.x

修复建议

  1. 在 URL 解码后、分割路径组件前执行规范化路径处理(基于堆栈的./..处理,合并//

  2. 拒绝尝试遍历允许根目录之上的路径(返回错误而非发送 CWD)

  3. 为编码遍历案例和混合排列添加单元测试

项目方回应

curl 维护者确认:


  • 该问题在 curl 8.13.0 及以后版本中已修复

  • 允许攻击者控制 URL 本身就存在安全风险

  • 适当的目录保护应在服务器端实现,不能依赖客户端保护

  • 使用--path-as-is参数时 curl 允许此行为


报告状态:不适用,不被视为安全问题更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)


公众号二维码


办公AI智能小助手


公众号二维码


网络安全技术点滴分享


用户头像

qife122

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
libcurl FTP路径规范化漏洞解析:编码%2e%2e导致目录穿越_网络安全_qife122_InfoQ写作社区