Next.js inspect 远程命令执行漏洞

漏洞概述

当 Node.js 进程以 --inspect 或 --inspect-brk 参数启动时,会开启一个 Chrome DevTools Protocol (CDP) 调试服务,默认监听在 127.0.0.1:9229。如果开发或运维人员错误地将该端口暴露到公网(例如绑定到 0.0.0.0),并且没有添加任何身份验证,攻击者就可以通过 CDP 协议连接到该调试接口,利用 Runtime.evaluate 方法在 Node.js 进程中执行任意 JavaScript 代码,从而获得服务器的控制权。

搜索引擎

fofa:body="WebSockets request was expected"

漏洞复现

Payload:/json

image

访问泄露的快捷链地址执行RCE命令

方法一:通过 chrome://inspect 页面连接 (推荐)

打开 Chrome 浏览器,在地址栏输入并访问:chrome://inspect。
在页面中,找到 "Devices" 或 "Remote Target" 部分。
点击 "Configure..." 按钮(如果可见)。
在弹出的对话框中,添加目标服务器的地址,然后点击 "Done" 完成配置。
配置完成后,在 "Remote Target" 列表中应该会显示你的 Node.js 应用。找到它,然后点击下方的 "inspect" 链接。
点击后,Chrome 就会打开一个专用的 DevTools 窗口,连接到你的远程 Node.js 进程,之后你就可以像调试本地代码一样,设置断点、查看变量、执行命令了。
命令1:require('child_process').exec('cat /etc/passwd',(err,stdout)=>console.log(stdout))
命令2:require('child_process').execSync('whoami').toString()

image

方法二:直接使用 devtoolsFrontendUrl

之前获取的 JSON 信息里,有一个 devtoolsFrontendUrl 字段,它的值是一个以 devtools:// 开头的链接。理论上,直接在 Chrome
不过,这种方法有时会因为跨域或权限问题连接失败,所以当方法一无效时,可以把它作为备选尝试。

image

修复建议

1、关闭互联网暴露面或接口设置访问权限
2、升级至安全版本

posted @ 2026-07-13 21:01  zhengna  阅读(3)  评论(0)    收藏  举报