在 EJS < 2.5.5 中检测到已知的中等严重性安全漏洞



我在 GitHub 上收到了一些项目的警报:

我们在其中一个依赖项中发现了一个潜在的安全漏洞 由您参与的存储库使用。

在 EJS <2.5.5 中检测到已知的中等严重性安全漏洞 在 package.json 中定义。建议 package.json 更新:EJS ~> 2.5.5。

我可以通过在package.json中进行推荐的更新来摆脱警告,并且npm update似乎可以正常工作。但我有点不愿意开始弄乱生产服务器。

该漏洞https://nvd.nist.gov/vuln/detail/CVE-2017-1000188创建于 2017 年 11 月 16 日。在警报项目中,ejsexpress使用,express仅与sequelize一起使用。

有人对此漏洞有见解吗?在ejs静态使用的情况下,XSS是如何被express内部使用的?是否有任何实际用例表明ejs->express->sequelize容易受到 XSS 攻击?

CVE 链接到此提交,该提交遵循早期提交,该提交阻止某些数据变量传入renderFile转换为控制 EJS 行为的选项。回顾 EJS 从 2.5.3 到 2.5.5 的变化,引入了可以转换为配置选项的允许数据列表。

如果 Express 应用程序直接从客户端(如req.paramsreq.body)将数据传递到render中,并且恶意用户可以将 EJS 选项添加到他们通过settings['view options']对象发送的任何请求中,则这可能是一个问题。我的猜测是允许您注入内容的其中之一。

EJS 还开始在 2.5.5 版本的错误消息中转义filename内容,这似乎是正确转义之前的快速修复,这似乎符合 XSS 模具。 不过,在客户端上渲染之前,通常需要对整个错误消息进行转义,如果您使用它,则 express 会为您执行此操作,这是默认的非生产错误处理。

我无法想象 Sequelize 会如何受到 XSS 漏洞的直接影响,除了您可以通过 XSS 引起的请求。

最新更新