我在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 创建于11.16.2017。在提醒的项目中,ejs
使用了express
,而express
仅使用sequelize
。
是否有人了解此漏洞?在ejs
静态和内部使用express
的情况下,XSS如何成为可能?是否存在ejs
- >的真实用例express
- > sequelize
可能容易受到XSS攻击?
答案 0 :(得分:2)
CVE链接到this commit之后的an earlier commit,它阻止某些数据变量传递到renderFile
,转换为控制EJS'的选项。行为。回顾the EJS changes from 2.5.3 to 2.5.5,引入了可以转换为配置选项的允许数据列表。
如果Express应用程序直接从客户端(render
或req.params
)将数据传递到req.body
,这可能是一个问题,恶意用户可以将EJS选项添加到任何请求中通过settings['view options']
对象发送。我猜是允许你注入内容的其中一个。
EJS也开始在2.5.5版本的错误消息中转义filename
内容,它似乎是一个快速修复,然后才能正确转义,这似乎符合XSS模式。整个错误消息通常需要在客户端呈现之前进行转义,如果您使用它的默认非生产错误处理,则表达式会为您执行此操作。
除了您可以通过XSS提出的请求之外,我无法想象Sequelize将如何直接受到XSS漏洞的影响。