AdonisJS 框架在处理用户上传的多部分文件时,错误地信任了客户端提供的文件名,从而引入了一个高危的路径遍历漏洞。攻击者利用此漏洞可以覆盖服务器上的任意文件,甚至实现远程代码执行。

当开发者使用 MultipartFile.move() 方法将上传的文件移动到指定位置时,如果未对用户输入的文件名进行严格的过滤与校验,攻击者可以构造包含目录遍历序列的文件名,例如:
../../../../app/config/startup.js
这会导致文件被写入预期上传目录之外的任意位置,完全绕过了应用的安全边界。这个漏洞对公开的文件上传端点构成了严重威胁,具体风险包括:
- 📂 任意文件写入:可以在服务器进程权限允许的任何位置创建或写入文件。
- 🧨 覆盖关键文件:能够覆盖应用程序源代码、配置文件或系统文件。
- 🖥️ 远程代码执行:通过写入Webshell或修改应用启动脚本,最终获得在服务器上执行任意代码的能力。
- 🌐 易于利用:此漏洞无需身份验证即可被远程触发。
受影响版本
经确认,以下版本的 @adonisjs/bodyparser 组件存在此安全缺陷:
@adonisjs/bodyparser ≤ 10.1.1 的所有稳定版本。
11.x 系列中 11.0.0-next.6 之前的所有预发布版本。
🔐 修复方案
最根本的解决方案是立即升级到已修复此漏洞的版本。请根据你的项目情况,尽快更新依赖。
🧯 临时缓解措施
如果暂时无法进行版本升级,可以采取以下措施来降低风险:
- 🧼 严格清理文件名:在处理前,对用户提交的文件名进行校验,拒绝包含
../、绝对路径或空字节等危险字符的文件名。
- 🧩 使用安全配置:确保调用
MultipartFile.move() 方法时,启用了相关的安全选项(如果框架提供)。
- 🔒 实施访问控制:为文件上传功能添加强制的身份认证与授权检查。
- 📁 限制文件系统权限:运行应用程序的进程应仅拥有必要目录的最小写入权限。
- 🧱 部署防护措施:考虑使用Web应用防火墙来检测和拦截常见的路径遍历攻击payload。

对于所有使用AdonisJS进行后端开发的团队来说,及时评估自身应用是否受影响并采取行动至关重要。这类文件上传相关的安全问题在Web开发中屡见不鲜,开发者应时刻保持对用户输入的不信任原则。如果你想了解更多关于Node.js安全或其他Web开发中的最佳实践,欢迎到云栈社区与大家交流探讨。
|