基于漏洞修复的场景解决

50 阅读4分钟

基础知识

  • CVE
    • common vulnerabilities & exposures。公共漏洞和暴露。
    • 安全漏洞字典表。
  • CAN
    • 与CVE区别是CVE是经过认可的条目,而CAN是候选条目,还未经过CVE编辑委员会认可。
  • CNCVE
    • 中国的CVE。
  • CNVD
    • 国家信息安全漏洞共享平台。
  • PoC
    • proof of concept。漏洞证明。
  • EXP
    • exploit。漏洞利用。
  • 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的目标环境特性。
        • build:{target:'es2022'}
  • 参考资料

参考资料