Nosec漏洞 09月05日
Node.js 调试模式存在高危漏洞,攻击者可远程执行任意命令
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

近期,Node.js 被曝出一个严重调试漏洞,当开启 inspect 调试模式并将服务暴露于公网时,攻击者无需任何认证即可远程执行任意命令。该漏洞对依赖 Node.js 的前端开发工具链(如 Webpack、Babel)及服务端框架(如 Express、Koa)构成严重威胁。Goby 安全团队发现近 900 个 Node.js 服务资产存在此风险,攻击者可利用漏洞轻松控制服务器。解决方案包括严格遵循官方安全指南,限制 inspect 调试模式仅绑定本地地址,并禁止暴露于公网,同时利用安全扫描工具定期检查潜在隐患。

🔍 **高危调试漏洞揭示:** Node.js 的 inspect 调试模式在服务暴露于公网时存在严重安全隐患。攻击者无需任何认证,即可通过访问特定调试地址,在服务器上执行任意命令,将浏览器转化为远程控制终端。这一发现对广泛应用于前端开发工具链和服务器端开发的 Node.js 生态系统带来了重大安全挑战。

🌐 **广泛影响与潜在风险:** 该漏洞影响 Node.js 在前端工具链(如 Webpack、Babel、ESLint)和后端服务(如 Express、Koa)中的广泛应用。Goby 安全团队通过 FOFA 查询发现了近 900 个存在此风险的暴露资产,一旦被非法利用,这些服务将面临 100% 的被攻击风险,攻击门槛极低,易于实现服务器的全面控制。

🛡️ **安全防护与解决方案:** 为应对此漏洞,官方建议严格遵循 Node.js 安全指南,非必要不开启 inspect 调试功能。若确需使用,务必将调试服务绑定本地地址(如 --inspect=127.0.0.1:9229),禁止暴露于公网,并采取防火墙、IP 白名单等访问限制措施。此外,建立定期安全检查机制,利用 Goby 等工具排查未关闭的调试服务和敏感端口暴露,及时修复潜在隐患。

各位前端开发师傅请注意!作为前端开发领域的核心库之一,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 服务的端口响应存在异常特征:这些服务在特定请求下会返回与调试模式相关的标识信息。


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

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

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


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

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

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


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

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


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

具体操作步骤如下:

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

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


第三步:

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

读取根目录:

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


操作被控机器:

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


解决方案:

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

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

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


Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Node.js 漏洞 安全 调试模式 任意命令执行 前端开发 服务器安全 Goby
相关文章