NRG Sentinel, runtime security for Node-RED

Sentinel's UI. Node Permissions, Network and CSP rules are added on a separate file called .sentinel-permissions.json to avoid exposing settings.js. All RED.* pass through sentinel's proxy and can't be monkey-patched by custom nodes or plugins anymore. This means you can now install unaudited packages without fearing exposing your data. Only admins have access to Sentinel.

Threats: all threats that Sentinel detected during startup and runtime.

Permissions: nodes can be configured with permissions to open up methods, props, credentias, context, wires, events to other nodes.


Network: configure which outbound calls client/server can perform

CSP: Content-security-policies. It can be used to let nodes/plugins load assets from different places

Just a note: This tool WILL break some custom nodes.

That is the goal. It locks the whole runtime. Users have to open things up.

You can all try NRG Sentinel.

I've toned down the language. Lets keep it clean please.

In what circumstances would my Node-red installations benefit from this additional runtime security?

Who are the attackers you have protected from - my own staff / family , Internet based users of my dashboard, authorised but malicious logged-in editors?

You can install public plugins or nodes that haven’t been audited without worrying about data exfiltration. Even if your Node-RED instance isn’t exposed to the internet, attacks can still come from inside.

A malicious or compromised node can:

  • Modify the runtime
  • Alter other installed packages
  • Tamper with your flows without you noticing

It’s even possible to reroute messages through “invisible” wires—logic that doesn’t appear in the editor or in flows.json—so your data could be redirected elsewhere without any visible trace.

Imagine you trusted a node or plugin and have been using it for years, with automatic updates enabled. One day, an update could introduce malicious behavior and start doing exactly the kind of things Sentinel is designed to prevent—without any obvious indication that something has changed.

The key issue is that anyone can publish packages to npm or the Node-RED library, and they become immediately available to any instance pulling from those registries. That means you’re ultimately trusting code that hasn’t necessarily been verified.

All techniques I used to secure the runtime are documented here

Security in Node-RED is still an afterthought in many production environments.

If you’re responsible for deploying Node-RED at scale, it’s worth asking directly:
What is your actual security model for third-party nodes today?

Because by default, there isn’t one.

Most Node-RED instances in production are effectively running with full trust in every installed package—no permission boundaries, no runtime enforcement, and no visibility into what those nodes are actually doing under the hood.

Sentinel exists to close that gap:

  • Make capabilities explicit
  • Enforce them at runtime
  • Give operators control before and after installation

The challenge isn’t the technology—it’s awareness.
Until teams clearly understand how easily flows and nodes can be abused for data exfiltration or manipulation, security will continue to be deprioritized.

That’s the gap I'm working to close.

Sentinel isn’t expensive when you look at the problem it solves—it eliminates an entire class of risk. People tend to associate cybersecurity with companies, but that’s outdated thinking. Your personal environment is just as exposed, and in many ways, less protected.

At home, you’re not just dealing with data—you’re dealing with identity, location, habits, and access to everything you own digitally. If that gets compromised, the impact isn’t a “business loss”—it’s your personal safety, your privacy, and your control over your own life. That’s a much harder thing to recover from.

The real question isn’t the price—it’s the cost of not having that protection in place. Sentinel positions itself as a safeguard layer where most people currently have none.

Get sentinel at: NRG Sentinel — Runtime Security for Node-RED

You told me to try hacking your NRG Sentinel, and I did.

Node-RED hasn't been modified; it's a registered node, as per the convention, nothing more, nothing less.

I won't share the node's contents or steps for reproducing this hack.

You wanted to create a commercial solution at the community's expense; now you have to deal with consequences...

I'd gladly share my code with the NR team to prove my point.

PS: If you know where to look, the log itself proves it's not an exec node or a simple console that's lying.

I wouldn't share any code here... If you don't believe me, well, too bad for you.

This is a public forum! I'm not going to share a way to bypass your NRG Sentinel and expose NR to invisible attacks.

Stop complaining and let's wait until I can share my code to an NR member.

And even if they arent, you could have granted process:env and process:exec grants.

I have nothing better to do on a Sunday...

@GogoVega please disclose any security issues you have identified in Allan's work to him in a responsible manner. You're right not to disclose issues publicly, regardless of what others have done.

@AllanOricil if you havent already, I suggest adding a clear means for users to report security issues with you privately.

And to both of you; please keep this forum a constructive place.

So far there hasn’t been any private disclosure—no email, no Slack message, and no concrete proof demonstrating an actual bypass of the loader guards.

The “evidence” shared publicly appears to be just log output, which on its own isn’t sufficient to validate a claim like this. Logs can be fabricated, misinterpreted, or generated from an environment that was misconfigured—such as explicitly granting permissions, altering the setup, or not running under the intended constraints.

If someone is going to make a public security claim, it needs to come with reproducible steps, a clear setup, and verifiable evidence so it can be independently validated. That’s the baseline for any credible report.

That said, I’ve been proactively reviewing the surface area and identified two additional native methods that can interact directly with V8 and potentially bypass the loader guards. Those weren’t part of the claim being made, but they’re valid hardening gaps.

I’ll be patching those and releasing version 1.0.5. As always, if anyone has a real finding, the right path is responsible disclosure with reproducible evidence so it can be validated and fixed properly.

I hope this wasn’t directed at me, but if it was, I want to clarify my position.

In the Sentinel repo and on the hero page, the vulnerabilities listed are not tied to any specific project or undisclosed issue. They represent common threat classes that exist across the ecosystem, with the goal of helping developers better understand the broader risk landscape.

This is no different from how antivirus or security products communicate—listing the types of threats they protect against without providing instructions on how to execute them. Sentinel follows the same principle.

Security depends on awareness—people need to understand what they’re up against in order to effectively defend against bad actors. The intent here is to educate and raise that baseline, not to expose or target anything specific. I’ve also never shared any code, exploit details, or steps that could be used to weaponize these threats.

I’m not disclosing specific vulnerabilities or targeting any project—just communicating the types of risks Sentinel is designed to prevent.

v1.0.6 released
changelogs are in the public repo for transparency.

So far the issues reported were due to users installing packages outside of the usrDir node_modules.

As mentioned by DM, I can still bypass your NRG even though my previous approaches have been successfully countered.

Although node_modules is the place for the majority of cases, there remains one case that bypasses it. (see your DM)

Note: I deliberately hid some lines that would reveal the way I took.