More security considerations

#1

Continuing the various threads about Node-RED security, I wanted to highlight another issue you may face. This is common to any NodeJS application.

You can get security vulnerabilities via many channels of course. The operating system being an obvious one. This is managed by regular patching along with security hardening. Next up is NodeJS which is the tool that underpins Node-RED along with other core tools such as ExpressJS, JQuery, D3 and so on. All of these need to be patched and secured. Node-RED already takes care of some of the security for you but patching is up to you.

Then you have the contributed nodes you use in your flows. These also use NodeJS and the majority will use 3rd party modules/libraries/packages as well.

Now you have an extra problem. Lots of these technologies and packages interlink. So just because you've updated Node-RED, that doesn't mean that it is free to use the latest version of a module because perhaps (as is currently the case) an older version of NodeJS is still supported. Similarly, contributed nodes are often written by part-time amateurs like me and so not always updated as rapidly as they should be.

All of this can leave occasionally gaping holes in your security. Connect this to the Internet and you can see the potential problems I hope. Also, I hope that you can see why many of us advise considerable caution about connecting Node-RED to the Internet directly.

I'll leave you with a current example from my own live home automation system (that is certainly NOT directly accessible from the Internet). The following is the output from running npm audit in my userDir folder after running npm update to install the latest patches.

Again, keeping perspective, is this a problem for everyone? No. Can it be managed? Yes. But there are risks and they need to be actively managed.

$ npm audit

                       === npm audit security report ===

# Run  npm update request --depth 3  to resolve 8 vulnerabilities
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-contrib-telegrambot                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-contrib-telegrambot > node-telegram-bot-api >       │
│               │ request > hawk > boom > hoek                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ sshpk                                                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-contrib-telegrambot                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-contrib-telegrambot > node-telegram-bot-api >       │
│               │ request > http-signature > sshpk                             │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/606                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-weather-underground                            │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-weather-underground > wundergroundnode >       │
│               │ request > hawk > boom > hoek                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ sshpk                                                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-weather-underground                            │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-weather-underground > wundergroundnode >       │
│               │ request > http-signature > sshpk                             │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/606                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-contrib-telegrambot                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-contrib-telegrambot > node-telegram-bot-api >       │
│               │ request > hawk > cryptiles > boom > hoek                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Out-of-bounds Read                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ stringstream                                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-contrib-telegrambot                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-contrib-telegrambot > node-telegram-bot-api >       │
│               │ request > stringstream                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/664                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-weather-underground                            │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-weather-underground > wundergroundnode >       │
│               │ request > hawk > cryptiles > boom > hoek                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Out-of-bounds Read                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ stringstream                                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-weather-underground                            │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-weather-underground > wundergroundnode >       │
│               │ request > stringstream                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/664                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


# Run  npm update hoek --depth 6  to resolve 8 vulnerabilities
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-contrib-telegrambot                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-contrib-telegrambot > node-telegram-bot-api >       │
│               │ request > hawk > hoek                                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-contrib-telegrambot                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-contrib-telegrambot > node-telegram-bot-api >       │
│               │ request > hawk > sntp > hoek                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-openweathermap                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-openweathermap > request > hawk > boom > hoek  │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-openweathermap                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-openweathermap > request > hawk > cryptiles >  │
│               │ boom > hoek                                                  │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-openweathermap                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-openweathermap > request > hawk > hoek         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-openweathermap                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-openweathermap > request > hawk > sntp > hoek  │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-weather-underground                            │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-weather-underground > wundergroundnode >       │
│               │ request > hawk > hoek                                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Prototype pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ hoek                                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-weather-underground                            │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-weather-underground > wundergroundnode >       │
│               │ request > hawk > sntp > hoek                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/566                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


# Run  npm update sshpk --depth 5  to resolve 2 vulnerabilities
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ sshpk                                                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-openweathermap                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-openweathermap > request > http-signature >    │
│               │ sshpk                                                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/606                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌───────────────┬──────────────────────────────────────────────────────────────┐
│ High          │ Regular Expression Denial of Service                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ sshpk                                                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-sqlite                                         │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-sqlite > sqlite3 > request > http-signature >  │
│               │ sshpk                                                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/606                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


# Run  npm update stringstream --depth 3  to resolve 1 vulnerability
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Out-of-bounds Read                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ stringstream                                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-node-openweathermap                                 │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-node-openweathermap > request > stringstream        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/664                       │
└───────────────┴──────────────────────────────────────────────────────────────┘


┌──────────────────────────────────────────────────────────────────────────────┐
│                                Manual Review                                 │
│            Some vulnerabilities require your attention to resolve            │
│                                                                              │
│         Visit https://go.npm.me/audit-guide for additional guidance          │
└──────────────────────────────────────────────────────────────────────────────┘
┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Moderate      │ Denial of Service                                            │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ protobufjs                                                   │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=5.0.3 < 6.0.0 || >=6.8.6                                   │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ node-red-contrib-google-home-notify                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ node-red-contrib-google-home-notify > google-home-notify >   │
│               │ castv2-client > castv2 > protobufjs                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/605                       │
└───────────────┴──────────────────────────────────────────────────────────────┘
found 20 vulnerabilities (16 moderate, 4 high) in 3248 scanned packages
  run `npm audit fix` to fix 19 of them.
  1 vulnerability requires manual review. See the full report for details.

I have a blog post where I'm slowly trying to put this kind of information together.

Please feel free to add more information for that post either here or in the comments on that page. If we can, between us, collect more information and guidance, we can help update the official documentation.

6 Likes

Package vulnerabilities
#2

Did you try this on your system? Is it risk free or will it destroy some functionality? I got a couple of similar warnings like you did, most of them related to Telegram

0 Likes

#3

I don't recommend it with Node-RED since there are too many interdependencies. When I looked too many of the updates that would be applied showed major updates which implies breaking changes (if devs are following semver correctly).

0 Likes