物联网开源组件安全:Node-RED白盒审计

文|腾讯研发安全团队

Spine、martinzhou

背景

Node-RED是IBM开源的低代码物联网编排工具,在物联网领域有广泛应用,包括研华WISE PaaS、西门子Iot2000、美国groov EPIC/groov RIO等工业IoT硬件也都预装了Node-RED。此外,它亦常被作为低代码开发平台使用。

A large proportion of our users are individuals who run Node-RED on personal devices - a laptop, a Raspberry Pi or a virtual machine in the cloud. They are building solutions for themselves - whether it’s home automation, adding skills to their Alexa or Google Home, or doing the types of online services like IFTTT can provide.

Another group of users come from the companies who have integrated Node-RED into their own products and services. Hitachi, Siemens, Samsung, Particle and many others.

—Nick O'Leary, What's next with Node-RED?

基于腾讯自研SAST语义分析引擎“啄木鸟”,开展漏洞变体分析。我们对Node-RED平台进行了人工和自动化白盒代码审计,发现了多个通用高危漏洞(CVE-2021-21298、CVE-2021-21297、CVE-2021-3223、CVE-2021-25864等),并进一步探究了潜在利用方式及危害,本文将详述分析过程及典型案例。

攻击面及风险分析

Node-RED平台基于Express.js开发,我们从鉴权方式、http接口、客户端安全以及组件生态等多个维度入手开展分析。

2.1 鉴权方式

Node-RED的鉴权方式依赖配置,默认没有任何鉴权,当开启鉴权后,会对接口进行鉴权。相关权限在settings.js文件中定义:

2.1.1 登陆机制

如果开启了鉴权功能,Node-RED会通过passport中的OAuth策略对用户进行登录校验并提供访问token,token通过浏览器的Local Storage存储。OAuth策略中使用账号密码进行登陆校验,通过bcrypt对用户密码进行校验。

此处可以认为不存在绕过方式。access token使用bearer策略进行校验,主要函数是:

Tokens采用map存储,此处存在一个潜在的安全风险:

当传入accessToken为__proto__时,token会返回prototype的内容,从而绕过if(token)的检查,后续如果有一个原型链污染漏洞能伪造user(用户名)字段,即可绕过token检查。

2.1.2 权限机制

通过检测用户对象中的scope字段区分读写接口权限,当scope字段为 "*" 时,默认可以读写所有接口,admin默认权限就是 "*"。Node-RED在0.14版本之后对权限做了细分,详细可见:

https://nodered.org/docs/user-guide/runtime/securing-Node-RED#user-permissions,权限类型概述如下:

Node-RED的权限管控功能由needsPermission函数实现,用例如下:

该接口就需要一个settings.write权限才能读取。如果接口声明未能和它的行为相符,或者存在漏洞,那么也可以认为是一个越权漏洞。

2.2 http接口

Node-RED中存在3类http接口:

  • 原生http接口

  • 内置节点注册的http接口

  • 第三方节点注册的http接口

上一节描述了Node-RED的接口鉴权机制,原生http接口未鉴权的较少,其中2和3类接口通过以下两种方式暴露:

因此,可以在源码中批量搜索来找未鉴权的接口。在对第三方组件分析、扫描过程中,我们发现很多插件都没有采用needsPermission方式鉴权,存在较大安全隐患。

2.3 客户端安全

Node-RED通过http头来实现鉴权,这意味着传统的CSRF攻击不再奏效,也有对应的CORS安全策略。

因此,主要关注的风险是XSS漏洞。从功能设计上看,Node-RED 前端只有一个大页面,使用JS操作dom的方式渲染后端数据,这种机制一定程度上收敛了产生XSS漏洞的风险。各组件面临的XSS风险及框架采取的预防措施,如下:

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值