Webpack源码泄露


0x01 漏洞简介

Webpack是一个JavaScript应用程序的静态资源打包器(module bundler)。它会递归构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle。大部分Vue等应用项目会使用Webpack进行打包,如果没有正确配置,就会导致项目源码泄露,可能泄露的各种信息如API、加密算法、管理员邮箱、内部功能等等。

0x02 漏洞检测

Webpack项目源码在泄漏的情况下,可以在浏览器控制台中的Sources—> Page—> Webpack://中查看源代码。

使用Webpack打包应用程序会在网站js同目录下生成js.map文件。

.map文件的作用:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。 有了map就可以像未加密的代码一样,准确的输出是哪一行哪一列有错。

直接查看网站的js文件,可以在末尾处有js.map文件名。

直接在当前访问的js后面拼接.map即可访问下载。

通过以上两种方式可以判断目标网站存在Webpack源码泄露问题。

0x03 漏洞利用

在某些情况下,不能直接在浏览器控制台中的Sources—> Page—> Webpack://中查看到Webpack项目源码,但是网站上存在js.map文件,我们可以通过一些工具将js.map中的内容进行还原Webpack项目源码。

1. reverse-sourcemap

使用npm安装reverse-sourcemap

npm install --global reverse-sourcemap

检查是否安装成功。

~/ reverse-sourcemap -h
reverse-sourcemap - Reverse engineering JavaScript and CSS sources from sourcemaps
Usage: reverse-sourcemap [options] <file|directory>

  -h, --help               Help and usage instructions
  -V, --version            Version number
  -v, --verbose            Verbose output, will print which file is currently being processed
  -o, --output-dir String  Output directory - default: .
  -M, --match String       Regular expression for matching and filtering files - default: \.map$
  -r, --recursive          Recursively search matching files

将js.map文件下载到本地,使用reverse-sourcemap进行js.map文件还原操作。

reverse-sourcemap --output-dir ./  main-7692d0319da0ace0bfc4.js.map

执行成功后生成的源代码会放在当前目录下的Webpack中。

接下来就可以对项目源代码进行审计分析工作。

2. SourceDetector

SourceDetector是一个谷歌浏览器插件,此插件可以自动的判断网站是否存在js.map文件,并且能够利用该插件直接下载到js.map的webpack项目源码。

下载插件项目到本地。

git clone https://github.com/LuckyZmj/SourceDetector-dist

打开谷歌浏览器扩展程序的开发者模式,加载已解压的扩展程序,选中插件项目中的dist目录即可安装插件。

安装好插件以后,每次浏览网站时,该插件就会自动获取js.map文件。

点击插件中的链接地址即可直接下载到js.map还原后的项目源代码。

0x04 漏洞修复

  • 在项目路径下修改config/index.js中build对象productionSourceMap: false;
  • 建议删除或禁止访问正式环境中的js.map文件;

文章作者: LuckySec
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuckySec !
评论
  目录