此代码库旨在帮助安全专业人员与开发者理解为何我认为 Formidable 并不受 CVE-2022-29622 漏洞影响。我在此处撰写了分析文章:CVE-2022–29622: (不)脆弱性分析
由于部分读者未能理解,我决定通过实际、可运行的代码来阐明我的观点。
服务器端实现在 index.mjs 中。它使用 Formidable 3.1.4 版本上传任意文件。
我按如下方式显式配置了 Formidable:
{
uploadDir: './uploads/',
keepExtensions: true,
}
这样所有文件都将上传至 uploads 目录。我已启用 keepExtension,以便你能上传带有恶意文件名的文件。
要设置并启动服务器,请从当前目录执行以下命令:
npm install
npm run start
第一条命令会安装所有依赖项,包括相应版本的 formidable。第二条命令将启动服务器。
启动并运行后,你可以通过以下地址访问服务器提供的文件上传表单:http://127.0.0.1:3000/
我在 examples 目录中包含了两个具有恶意文件名的文件作为示例。
通过 http://127.0.0.1:3000 表单提交的文件会被上传至 uploads 目录。
挑战在于测试你是否能证明 formidable 受 CVE-2022–29622 漏洞影响。要做到这一点,你必须让此 Web 服务器执行你包含在上传文件或文件名中的代码。
规则如下:
3000。你不得修改此目录内的任何文件。如果你能严格遵守上述规则实现任意代码执行,只有那时你才证明了 formidable 存在任意代码执行漏洞。
建议:最简单的可视化证明方式可能是让服务器在启动 Web 服务器的控制台上输出一个字符串,例如 "I'm awesome, I've got arbitrary code executed"。