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

2024-03-23 19:58

本文主要是介绍物联网开源组件安全: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风险及框架采取的预防措施,如下:

这篇关于物联网开源组件安全:Node-RED白盒审计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/839375

相关文章

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB