
VulnCheck says attackers are exploiting the CVE-2026-58115 Siemens IoT2050 flaw, a CVSS 10.0 missing-authentication bug in the Node-RED HTTP interface on SIMATIC IoT2050 Advanced devices. Every confirmed sighting so far comes from VulnCheck's honeypots. No production plant has been named.
Key takeaways
- CVE-2026-58115 is a CVSS 10.0 missing-authentication bug in the Node-RED HTTP interface on Siemens SIMATIC IoT2050 Advanced devices running Industrial OS with Node-RED installed. Siemens says versions 4.3.4.1 or later fix it.
- Siemens published its advisory in August 2026. VulnCheck reported exploitation attempts against its honeypots as of October 30, 2026, with no named actor and no confirmed production victims.
- The first requests deployed a flow, triggered it automatically and pulled an AMD64 Linux bot to /dev/shm/.b using wget with curl as a fallback, behind three layers of encoding. Later requests used wget.sh and a payload saved as /tmp/.kworker. VulnCheck could not retrieve either second stage.
- Some requests saved an HTTP command flow, such as /cmd, that survives reboot after a memory-backed implant is gone. If 4.3.4.1 cannot land, uninstall Node-RED or enforce HTTPS plus authentication on the editor, admin API, HTTP Nodes and Dashboard, and keep the listener off untrusted networks.
What is the CVE-2026-58115 Siemens IoT2050 flaw?
CVE-2026-58115 is a missing-authentication flaw in the Node-RED HTTP interface on Siemens SIMATIC IoT2050 Advanced devices that run Industrial OS with Node-RED installed. It carries a CVSS score of 10.0, the maximum. Siemens disclosed it in an advisory in August 2026.
An unauthenticated remote attacker can create malicious flows and execute arbitrary code on the underlying server with maximum privileges. The attacker needs no credentials and no prior foothold on the host. Reaching the interface is enough to program the device.
Node-RED is a flow runtime: operators wire nodes together in a browser editor and deploy the result. Deploying flows is the intended feature. The flaw removes the check on who gets to use it, so the attacker needs no memory-corruption trick and no injection string.
Siemens says the issue is fixed in versions 4.3.4.1 or later. Check the advisory’s product table to confirm which component that number refers to on your units, and track every device against it rather than against an upstream Node-RED release number.
For operators who cannot patch right away, Siemens published concrete workarounds. Uninstall Node-RED if the cell does not need it. If it must stay, enable HTTPS, secure the editor and admin API with credentials or an OAuth/OpenID provider, and put basic authentication on HTTP Nodes and the Node-RED Dashboard.
Siemens lists those as separate steps because they protect separate surfaces. A login on the editor does not protect an HTTP endpoint that a flow already exposes, and HTTPS on its own authenticates nobody.
What did VulnCheck's Node-RED honeypots catch?
VulnCheck says it saw attackers trying to weaponize CVE-2026-58115 against its honeypot network as of October 30, 2026. The first requests aimed to download and run a Linux bot built for AMD64. Every sighting so far hit a decoy, not a confirmed Siemens customer.
VulnCheck researcher Patrick Garrity called the first request “a complete exploit.” In one call it deployed a Node-RED flow, triggered that flow automatically, and pulled a binary from an attacker-controlled server, with the whole request wrapped in three layers of encoding.
The flow ran a shell script wrapper that tried wget first and fell back to curl. The bot was saved to /dev/shm/.b, a memory-backed location, and executed. VulnCheck did not name a malware family.
The operators then changed approach. Later requests used wget to fetch a second shell script, wget.sh, from the same server, turning a single encoded download into a two-stage pull. Another request reached a different server on a high port, fetched a payload called .sys_update, saved it as /tmp/.kworker to pass as a kernel worker thread, and ran it.
VulnCheck could not retrieve wget.sh or the .kworker payload, so their behavior is unknown. Any capability list for those files is a guess.
Several requests deployed no downloader at all. They left behind a flow that exposes an HTTP endpoint, such as /cmd or a randomly named path, and runs whatever command arrives in a query parameter.
Host artifacts worth hunting, all from VulnCheck’s findings:
- /dev/shm/.b, the first-stage bot in memory-backed storage
- /tmp/.kworker, fetched under the name .sys_update
- wget.sh, the unrecovered second-stage script
- HTTP In routes nobody commissioned, such as /cmd or random paths
- wget or curl launched by the Node-RED process
VulnCheck’s report also lists two attacker server addresses. We do not republish attacker infrastructure; take them from VulnCheck and load them into egress blocking and log search. A match shows a device contacted a known server. It does not prove compromise, and a clean search does not prove the opposite.
The record names no threat actor, sector, country or victim count.
Why does the Node-RED flow backdoor survive a reboot?
The flow backdoor survives a reboot because Node-RED saves deployed flows and reloads them when the service starts. The bot in /dev/shm sits in memory-backed storage and disappears on restart. As Garrity put it, the backdoor “survives even if a memory-backed implant is lost on reboot.”
The wiring uses three standard nodes. An HTTP In node accepts the request. A function node moves the query parameter into the message payload. An exec node runs a configured command, and with its “append payload to command” option (addpay in the flow configuration) enabled, it adds that payload to the command. The query string becomes a shell command.
None of this is a Siemens-specific trick. The append-payload option is ordinary Node-RED behavior, used legitimately to pass arguments to scripts. That is why the backdoor blends in: a reviewer skimming the editor sees nodes that appear in plenty of real flows.
After the first unauthenticated deploy, the attacker needs no second exploit. The endpoint stays live as long as the flow remains saved and the interface remains reachable. Nothing in VulnCheck’s findings suggests an upgrade removes a flow already on the device, so audit flows after patching as well as before.
This changes incident handling. Killing the bot and rebooting looks clean and is not. In upstream Node-RED, deployed flows live in a flows file under the runtime’s user directory, which settings.js defines. Siemens’ image may place it elsewhere, so locate it on the device rather than assuming the path.
Before any redeploy, reboot or deletion, copy the flows file, the Node-RED settings, the service definition, runtime logs and any HTTP access logs. The saved flow may be the only artifact that outlasts the implant. Then isolate the device, remove unauthorized flows through a trusted admin path, patch, and check again.
Apply the same scrutiny to anything named .kworker. Genuine kernel worker threads show bracketed names in process listings and have no executable in /tmp. A user-space process called .kworker, running from /tmp with an open network socket, is not a kernel thread.
Who is exposed to CVE-2026-58115 on a Siemens IoT2050?
A device is exposed when four conditions hold: it is a SIMATIC IoT2050 Advanced, it runs a version below 4.3.4.1, Node-RED is installed, and the Node-RED HTTP interface is reachable from a network you do not fully control without Siemens’ authentication controls in place.
That scope is narrower than “anything with a Siemens badge.” The advisory names no other SIMATIC family. A unit that never had Node-RED is out of scope. So is one running 4.3.4.1 or later, provided nobody reinstalled an older image or loosened authentication afterward.
Reachability carries most of the risk. A listener that answers only on an isolated engineering segment, with no route from corporate IT, vendor remote access or a dual-homed laptop, is much harder to hit than one forwarded through a plant firewall.
Lower risk is not zero risk. Anyone who reaches the port from inside the cell still gets unauthenticated flow deployment, whether that is a contractor laptop, a compromised HMI or malware already on the segment.
Siemens says successful exploitation yields code execution with maximum privileges. Do not assume the runtime runs under a limited account because other Node-RED installs do. Read the service definition on each device and record the account that actually runs Node-RED, since that decides what a malicious flow can touch.
Build the inventory around four questions: which IoT2050 Advanced units exist, which build each runs, whether Node-RED is installed, and which network zones can open the editor, the admin API, the Dashboard and any HTTP routes that flows created. IoT device penetration testing covers the image, the listeners and the management plane on each unit.
What should you do this week if 4.3.4.1 will not land?
Patch first: move every affected IoT2050 Advanced to version 4.3.4.1 or later. If that build cannot reach the cabinet in this maintenance window, uninstall Node-RED or apply Siemens’ authentication controls, and cut every untrusted network path to the listener.
Only the patch fixes the bug. The workarounds remove one precondition, an unauthenticated and reachable Node-RED interface, and they only hold if every surface is covered.
Verify each control on its own. Siemens lists the editor and admin API separately from HTTP Nodes and the Dashboard, and Node-RED protects them through separate authentication settings. Request each surface without credentials and record the response.
Then read the live flows. Compare them against the last approved export and look for HTTP In, function and exec nodes nobody commissioned, especially an exec node with append-payload enabled behind an HTTP route.
Restrict egress. The honeypot chains used wget and curl to fetch binaries and scripts from attacker servers, and an edge gateway rarely needs to reach arbitrary web hosts. Deny that traffic by default. Egress control does not close CVE-2026-58115, but it breaks the downloader and the two-stage script pull.
The flow-only backdoor needs no egress. It needs the HTTP interface to stay open, so authentication and reachability both have to change. External network penetration testing confirms the listener is absent from untrusted zones, including vendor jump hosts and remote-support paths.
What does a port scan miss on this edge box?
A network test that only maps open ports will flag a Node-RED listener and move on. CVE-2026-58115 raises a different question: can an unauthenticated client deploy a flow that executes on the host? A banner fingerprint cannot answer that.
Upstream Node-RED listens on TCP 1880 by default, but a Siemens image, a port forward, a reverse proxy or a container can publish it elsewhere. An open 1880 is a lead, and a closed 1880 is not a pass.
The admin plane is a web API, not a proprietary industrial protocol, so ordinary application testing reaches most of this bug. Name the editor, the admin API, the Dashboard and every flow-created HTTP route as in-scope surfaces, record the build beside each, and agree up front whether the test stops at proof of anonymous deploy or continues to a controlled, harmless command.
Add the network paths: IT to the edge, vendor access to the edge, and outbound traffic from the edge. A flat engineering VLAN is how a flaw disclosed in August reaches a production cabinet months later. OT and ICS penetration testing that starts from the Siemens advisory covers both the runtime and the routes to it.
The public record still has gaps: no named actor, no confirmed production victim, and two second stages nobody has examined. None of that changes the test. If anyone can write a flow anonymously, the bot is optional.
FAQ
What is CVE-2026-58115?
CVE-2026-58115 is a CVSS 10.0 missing-authentication vulnerability in the Node-RED HTTP interface on Siemens SIMATIC IoT2050 Advanced devices running Industrial OS with Node-RED installed. Siemens says an unauthenticated remote attacker can create malicious flows and execute arbitrary code with maximum privileges on the underlying server.
Is the Siemens IoT2050 Node-RED flaw being exploited?
Yes, against honeypots. VulnCheck reported exploitation attempts as of October 30, 2026 that tried to download and run an AMD64 Linux bot and, in other requests, to leave an HTTP command flow behind. No production compromise or threat actor has been publicly confirmed.
Which SIMATIC IoT2050 versions fix CVE-2026-58115?
Siemens says versions 4.3.4.1 or later remediate the issue. Confirm in the Siemens advisory which component that number refers to on your units, and do not substitute an upstream Node-RED version number.
Is the Node-RED flow backdoor persistent after reboot?
Yes. VulnCheck says the flow-based backdoor survives even if a memory-backed implant is lost on reboot, because Node-RED reloads saved flows when the service starts. Removing the bot without removing the flow leaves the device open.
If IoT2050 gateways still run on a production cell and 4.3.4.1 is not in this window, OT and ICS penetration testing from agent::offense will show whether the Node-RED admin plane is reachable and whether a saved flow would outlive a reboot.