开发者别大意!Node.js 未授权安全漏洞,你的服务器可能正在被攻击者远程操控。

阔爱滴牛胖筋  9小时前

932be288c82609cded5becf497f2433d.png

各位前端开发师傅请注意!作为前端开发领域的核心库之一,Node.js 近期被曝光一个高危调试漏洞 ——只要开启Node.js inspect调试模式并将服务暴露于公网,攻击者即可无需任何认证访问服务器执行任意命令。

Node.js 在前端开发中应用广泛,在开发领域中的重要性不言而喻:

在工具链构建与自动化领域,Webpack 打包、Babel 转译、ESLint 代码校验等基础开发流程均依赖 Node.js 实现。服务端开发中,借助 Express、Koa 等框架,可快速搭建轻量高并发的 API 服务;实时应用场景下,依托非阻塞 I/O 模型,结合 Socket.io 能高效实现即时通讯功能;。此外,基于 Next.js、Nuxt.js 等框架,还可实现 React、Vue 技术栈的全栈开发,优化用户体验与 SEO 表现。

可以说,Node.js 已成为现代前端开发体系中不可或缺的组成部分。

漏洞发现

近日,Goby 安全团队的研究人员正在开展企业公网资产的安全普查工作,其中针对 Node.js 服务的专项安全排查是重点内容之一。在排查过程中,研究人员发现部分 Node.js 服务的端口响应存在异常特征:这些服务在特定请求下会返回与调试模式相关的标识信息。

image.png

进一步测试后竟意外发现:当 Node.js 服务开启 inspect 调试模式时,通过浏览器访问其生成的调试地址,竟可直接进入调试控制台,且无需任何认证即可执行任意命令,浏览器直接变身shell终端。

这意味着开启inspect 调试模式且暴露公网的服务,均面临被非法控制的风险。

(fine!虽然Nodejs官方文档中明确说明了inspect参数的安全风险,但是看来依然有不少粗心大意的开发者在衍生的框架和库中滥用inspect参数)

image.png
为摸清影响范围,Goby 安全团队提取了开启 inspect 调试模式的服务资产指纹信息:

FOFA查询语法:body="WebSockets request was expected"

竟有将近900个开启了该调试服务的暴露资产,按照理论上的攻击路径,目前这些暴露在公网的服务一旦被非法利用,中招率100%。

image.png

这个漏洞的风险点在于门槛极低,一旦暴露公网,攻击者很容易利用它实现对服务器的控制。

一般来说若要用Chrome远程某个客户端的终端进程,需要在Chrome设置中指定监听客户端的IP及端口,之后点击inspect才能够进入控制台。

image.png
但是Node.js很“贴心”地把快捷链接调试地址返回到了前台页面,使用该链接即可直接连接到远程终端。

具体操作步骤如下:

第一步:访问 {host}/json 获取调试地址

image.png

第二步:启动chrome开发者模式,通过chrome访问调试地址即可打开控制台:

image.png
第三步:

在控制台输入Nodejs代码即可实现:

读取根目录:

require("child_process").exec("ls /", (err,std) => console.log(std))

image.png
操作被控机器:

require("child_process").exec("open -a Calculator", (err,std) => console.log(std))

image.png
解决方案:

  • 严格遵循Node.js官方安全指引,非必要不开启 inspect 调试功能
  • 若开发过程中确需使用,务必确保调试服务仅绑定本地地址(如 --inspect=127.0.0.1:9229),禁止暴露于公网,并通过防火墙、IP 白名单等手段限制访问权限。

其次,建立定期安全检查机制,可利用 Goby 等安全扫描工具对项目环境进行检测,重点排查是否存在调试服务未关闭、敏感端口暴露等问题,及时发现并修复潜在隐患。

Goby标准版及企业版已支持Node.js调试模式任意命令执行漏洞检测:

7b2f2262013c7687a8aa07f69d0c82df.gif

最新评论

昵称
邮箱
提交评论