基于漏洞修复的场景解决
基础知识
- CVE
- common vulnerabilities & exposures。公共漏洞和暴露。
- 安全漏洞字典表。
- CAN
- 与CVE区别是CVE是经过认可的条目,而CAN是候选条目,还未经过CVE编辑委员会认可。
- CNCVE
- CNVD
- PoC
- EXP
- 0DAY
- 刚被发现还未公开的漏洞,也没有相应的补丁程序,威胁大。
- XSS攻击
- 原理。攻击者利用目标服务器对于输入缺失检查,夹杂恶意的HTML脚本代码,用户浏览器浏览时,由于对服务器的信任,直接执行恶意脚本。
- 类型。6种。反射型,存储型,DOM-based型,基于字符集型,基于Flash的跨站,未经验证的跳转。
- 版本号
- 基本组成。主版本号.次版本号.修订号
- 主版本号。当进行了不兼容的API更改时增加。
- 次版本号。当以向后兼容的方式添加功能时增加。
- 修订号。当进行向后兼容的问题修复时增加。
- 符号
- 波浪号
- ~版本号。表示安装指定次版本号的最新修订版本,但不包括更高次版本号的任何版本。
- 插入号
- ^版本号。表示安装指定主版本号的最新次版本和修订版本,但不包括更高主版本号的任何版本。
场景解决
CVE-2012-8881、2012-5882、2012-5883
- 问题描述
- 项目的漏洞报告文件显示项目使用了存在漏洞的YUI 2.9版本。
- 根据CVE网站描述,YUI中存在一个跨站脚本XSS漏洞,运行攻击者利用.swf文件注入恶意代码。而版本2.4-2.9处于受影响范围。
- 官方
- 检测
- 检查托管的YUI 2目录的.swf文件的MD5来确定是否托管了2.4-2.9版本中的受影响文件。
- 方案解决
- 1、升级YUI 3。
- 2、加载YUI 2从CDN,如yui.yahooapis.com, ajax.googleapis.com。
- 3、针对受影响的.swf文件
- 当未使用这些文件,可从服务器中删除托管的受影响的 YUI 2的.swf文件。
- 下载受影响文件的直接替代品,用补丁版本替换受影响的文件。
- 实际处理
- 项目1处理
- 经排查,项目中不存在直接依赖YUI,而是YUI作为直接依赖jsencrypt 3.3.0的直接依赖,jsencrypt在yahoo.js中直接使用了YUI的核心代码,并未直接涉及漏洞相关功能。
- 经调查,在jsencrypt 3.5.4版本中,移除了yahoo.js代码,直接避免了相关问题。
- 升级至jsencrypt 3.5.4。
- 参考资料
CVE-2024-4367
- 问题描述
- PDF.js是Mozilla维护的基于JavaScript的PDF查看器,低版本的漏洞允许攻击者在打开恶意PDF文件时立即执行任意JavaScript代码。
- pdfjs-dist是PDF.js打包后的Node模块。
- 受影响版本
- Mozilla PDF.js < 4.2.67
- pdfjs-dist(npm) < 4.2.67
- react-pdf(npm) < 7.7.3
- 8.0.0 <= react-pdf(npm) < 8.0.2
- 实际处理
- 项目1
- 经排查,项目中当前使用了直接依赖pdfjs-dist 3.17.174版本,处于受到该漏洞影响范围。
- 根据作者的回答,版本4.2.67可以避免CVE-2024-4367和CVE-2018-5158两种漏洞。
- 之后编译构建时,报错“Top-level await is not available in the configured target environment ("chrome87", "edge88", "es2020", "firefox78", "safari14" + 2 overrides)”,提示关于顶层await问题语法。
- 经分析,vite的开发环境中使用Esbuild预构建,而Esbuild默认的目标环境不支持顶层await语法。所以需要设置Esbuild在预构建阶段的高版本目标环境。
- optimizeDeps: { include, exclude, esbuildOptions: { target: "es2022" } },
- 之后可以通过开发环境的编译构建,在测试PDF预览功能时发现导入失败,经排查,将PDF相关代码中更改导入文件的格式,使用当前版本的mjs格式。
- 之后生产构建时,同样报错类似。配置打包阶段Rollup的目标环境特性。
- 参考资料
参考资料