1. 漏洞结果
JavaScript 框架或库是一组能轻松生成跨浏览器兼容的 JavaScript 代码的工具和函数。如果网站使用了存在漏洞的 JavaScript 框架或库,攻击者就可以利用此漏洞来劫持用户浏览器,进行挂马、XSS、Cookie劫持等攻击。
1.1 漏洞扫描截图
1.2 具体漏洞的 js 文件
1.3 参考博客
Vue 项目安全扫描漏洞,JS 库版本太低,要求升级 YUI,过程总结
2. 定位漏洞
博客中提供三个可能存在这个漏洞的框架库。
- jquery;
- js-cookie;
- jsencrypt。
2.1 开始狡辩
-
jsencrypt 依赖包最新版本查询
-
漏洞项目的 jsencrypt 的版本
由于前两个框架项目中没有使用,所以直接找第三个,证明漏洞项目已经是最新的了,而且项目中没有使用 YUI 库。因此可能不是这个库的问题。
2.2 漏洞甩脸
安全扫描在扫描代码里边的确存在这个漏洞!
2.3 全局搜索
全项目搜索,并未找到该漏洞,但是打包后漏洞又是存在的,就说明漏洞因该在 jsencrypt 包里。
2.4 找到漏洞代码
可以看到这个代码是存在在 jsencrypt 中的,只是是通过 eval 方法执行的,哎,没想到最新版本,还是存在这个漏洞,但是加密又要使用,不能修改包里的文件。
3. 漏洞分析
YUI 2.8.0至2.9.0中Flash组件基础架构中的跨站脚本(XSS)漏洞,如4.0.9之前的Bugzilla 3.7.x和4.0.x、4.2.4之前的4.1.x和4.2.x以及4.4rc1之前的4.3.x和4.4.x中使用的漏洞,允许远程攻击者通过与swfstore.swf相关的向量注入任意web脚本或HTML,这与CVE-2010-4209类似。
他的意思就是说 2.9.0 版本中的 Flash组件允许远程攻击者通过与swfstore.swf相关的向量注入任意web脚本或HTML导致的跨站脚本(XSS)漏洞。
3.1 检查是否使用了 YUI 的 Flash 组件
可以看到代码只使用了 YUI 的 lang.extend 方法,并没有 Flash 组件的使用。原理上该项目是不存这个漏洞的,那么安全扫描是怎么扫出来存在漏洞的呢?
3.2 安全扫描报告
通过报告可以看出,他是通过 YUI:2.9.0 这个版本号来得出安全隐患的。
4. 解决办法
通过上边分析,首先我们代码中没有使用 YUI 的 Flash 组件,所以不存在安扫报告里边的漏洞,但是你又高让安全扫描通过,而安全扫描是通过 YUI:2.9.0 版本号来确定存在隐患的,解决办法:删除版本号。
4.1 使用压缩后的文件
// 旧的引入方式
import JSEncrypt from 'jsencrypt'
// 新的引入方式
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
4.2 删除注释
- 删除注释:vue.config.js 配置代码
chainWebpack(config) {// 删除注释config.optimization.minimizer('terser').tap(args => {// 直接修改 terserOptions 下的属性值,保留原有配置// 这里访问 terserOptions 的时候并没有 output,访问不到 output.comments 需要直接赋值args[0].terserOptions.output = {comments: false,}return args})
}
- 在漏洞项目运行报错
5. Vue项目WebPack打包删除注释和console
5.1 安装 uglifyjs-webpack-plugin
npm install uglifyjs-webpack-plugin -D
5.2 vue.config.js 配置
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')module.exports = {configureWebpack: {optimization: {minimizer: [new UglifyJsPlugin({uglifyOptions: {// 删除注释output: {comments: false},// 删除console debugger 删除警告compress: {drop_console: true, //consoledrop_debugger: false,pure_funcs: ['console.log'] //移除console}}})]}}
}
6. 总结
- 最后通过安全扫描,其实这个漏洞只是存在隐患,项目中并没有使用 YUI 的 Flash 组件,因此是不存在这个漏洞,但是项目要通过安全扫描,没有办法,只能根据扫描工具的定位漏洞方法,去解决。
- 这个过程都是根据已存在的博客去依次排查解决,所以这些问题遇到了,就只能看能不能在网上找到解决办法,下一次一个安扫问题,估计不一定能解决。