该仓库包含围绕 PoC 开发的所有工作,内容涉及一个简单的 OOB(越界)读取如何导致 jail 逃逸以及访问控制失效。
原始的 CVE 描述如下:

官方仓库中的 Github PR 详细说明了 ls.c 文件中的 domlsd() 函数如何存在越界读取漏洞,原因是对基础指针的递增没有进行检查,这可能导致指针指向 cmd 缓冲区之外的地址,正如第 1053 和 1054 行所示。

在 GDB 中调试缓冲区时,我们注意到越界读取会让程序进入一个名为 replybuf 的区域。
经过进一步分析,我们发现 replybuf 是一个缓冲区,其中填充了服务器提供给客户端的响应。replybuf 定义在 ftpd.c 文件中,如下所示:

因此总结如下:
base 指向 replybuf 的一部分。replybuf 包含提供给客户端的响应。现在,最初的 Github PR 中,CVE 作者没有考虑/演示过以下情况:如果 ls.c:1055 中的条件返回为真,会发生什么?

我们开始思考这个问题,结果发现,如果攻击者能够让 chdir(base) 返回真,domlsd() 函数就会继续列出文件。
团队考虑了 VMsetup.txt 中提供的关于系统管理员设置受限环境的场景,并决定构建一个按以下方式工作的漏洞利用程序:
受限用户将连接到易受攻击的 FTP 服务器,并使用其凭据登录。
nc <server-ip> <ftp-port>
USER <username>
PASS <password>
然后,用户将进入 EPSV 模式。
EPSV
用户记下返回的端口号,因为他们需要连接该端口以读取列表结果。
用户现在可以创建一个链接文件(具体取决于缓冲区偏移量,该偏移量可根据收到的最后一条回复轻松自动化),指向他们想要列出文件的目录。
用户发送恶意命令(取决于所选偏移量)。
MLSD -........<more than 4096 to overflow the cmd buffer>
然后,用户可以建立另一个连接到之前记下的端口号,以读取列表。
我们开发了一个自动化漏洞利用脚本 pure.py,该脚本执行上述相同步骤,并且基于我们在测试过程中开发的其他脚本,这些脚本可以在 dev_files 目录中找到。
要复现该漏洞,你可以按照 VMsetup.txt 中的虚拟机搭建分步指南进行操作。
要创建易受攻击实例的 Docker 容器,你可以参考 Dockersetup.txt。