CUTSIGNcutting for sign — daily OSINT threat read
AI-generated verdict card, published automatically by the pipeline on day one because the brief rated the story P1. Version 2, as of 2026-11-04; hype score 7 (below the usual publish bar: early read from few sources, revised as the story develops). Written by a model from the stored public sources and not reviewed by a person; re-issued in place when the evidence changes (the URL stays). The detection-coverage table below is checked automatically from public sources and re-checked daily. Supersedes version 1. All cards · news: CVE-2026-58115

Node-RED flaw CVE-2026-58115 on Siemens IoT2050 exploited to drop a Linux bot and webshell flows

Hunt + harden; Patch (IoT2050)P1confidence: mediumP1 +2deep read +1day 2 of the story +13 publishers +1primary source +1public PoC repo +1P1: card on day one (score below the publish bar; revised as the story develops)

VulnCheck observed attackers exploiting an unauthenticated Node-RED HTTP interface on SIMATIC IoT2050 Advanced devices to deploy flows that fetch a Linux bot and plant /cmd-style webshells. Today, find any Node-RED without adminAuth or reachable from untrusted networks, lock it down or update IoT2050 to 4.3.4.1, and hunt for the reported IPs and drop paths.

Triage: Exploitation of an unauthenticated CVSS 10 interface has been observed in the wild with one request, and the behaviours can be hunted directly [S1][S2].

Two reputable secondary outlets report VulnCheck's findings, and NVD lists the CVE. There is no VulnCheck, Siemens or Node-RED primary advisory in the input. The observations come from honeypots.

Changed since version 1

What happened

Timeline

2026-08-11CVE-2026-58115 published in NVD S3
2026-10-30VulnCheck begins observing exploitation against its honeypots S2
2026-11-03The Hacker News reports the campaign S2
2026-11-04SecurityWeek reports the campaign and gives the payload IP and filename S1

Detect

Node-RED spawning shell or downloader · Linux host process events (EDR, auditd or Sysmon for Linux)

index=* (parent_process_name="node" OR parent_process_name="node-red" OR parent_process="*node-red*") process_name IN ("sh","bash","wget","curl") | stats count min(_time) as first max(_time) as last values(process) as cmdlines by host parent_process_name process_name
FROM logs-* | WHERE (process.parent.name IN ("node", "node-red") OR process.parent.command_line LIKE "*node-red*") AND process.name IN ("sh", "bash", "wget", "curl") | STATS count = COUNT(*), first = MIN(@timestamp), last = MAX(@timestamp), cmdlines = VALUES(process.command_line) BY host.name, process.parent.name, process.name

A hit means: A Node-RED process launched a shell or a downloader, as the malicious flow does [S1][S2]. Treat it as likely compromise unless a known flow uses exec.

Flow deployment via admin API · Node-RED HTTP access logs / reverse proxy or web logs

index=* (uri_path="/flows" OR uri="*/flows*") (http_method="POST" OR method="POST") | stats count min(_time) as first max(_time) as last values(src_ip) as src by host uri_path status
FROM logs-* | WHERE (url.path == "/flows" OR url.original LIKE "*/flows*") AND http.request.method == "POST" | STATS count = COUNT(*), first = MIN(@timestamp), last = MAX(@timestamp), src = VALUES(source.ip) BY host.name, url.path, http.response.status_code

A hit means: Flows were deployed through the admin API. A deploy from an external or unknown source matches the exploit [S1][S2]. Check it against change records.

Execution from /dev/shm/.b or /tmp/.kworker · Linux host process and file events

index=* (process="/dev/shm/.b*" OR process="/tmp/.kworker*" OR process_path="/dev/shm/*" OR file_path="/dev/shm/.b" OR file_path="/tmp/.kworker") | stats count min(_time) as first values(process) as cmdlines values(parent_process_name) as parents by host
FROM logs-* | WHERE process.command_line LIKE "/dev/shm/.b*" OR process.command_line LIKE "/tmp/.kworker*" OR process.executable LIKE "/dev/shm/*" OR file.path IN ("/dev/shm/.b", "/tmp/.kworker") | STATS count = COUNT(*), first = MIN(@timestamp), cmdlines = VALUES(process.command_line), parents = VALUES(process.parent.name) BY host.name

A hit means: A file was written to, or run from, a reported bot drop path [S1][S2]. Treat it as probable bot installation.

Requests to HTTP-in command endpoints · Node-RED HTTP access logs / reverse proxy or web logs

index=* (uri_path="/cmd" OR uri="*/cmd?*") | stats count min(_time) as first max(_time) as last values(src_ip) as src values(http_method) as methods by host uri_path status
FROM logs-* | WHERE url.path == "/cmd" OR url.original LIKE "*/cmd?*" | STATS count = COUNT(*), first = MIN(@timestamp), last = MAX(@timestamp), src = VALUES(source.ip), methods = VALUES(http.request.method) BY host.name, url.path, http.response.status_code

A hit means: Something requested a /cmd-style endpoint, which may be a webshell wired to an exec node [S1]. Paths can be random, so a miss is not clearance.

Verify

Scope

Affected

Only if

Not affected if

Fixed in: SIMATIC IoT2050 Advanced 4.3.4.1, per pipeline exposure data. This is not stated in S1-S3; confirm it against the Siemens advisory.

Enumerate

Contain

Eradicate

Recover

Re-enter the loop when

Debrief

Detection coverage — checked automatically

CategorySourceStatus
VendorImpacted vendor / CERT advisorypublished — primary source among the thread's sources: https://nvd.nist.gov/vuln/detail/cve-2026-58115
GovernmentCISA KEV · CVE-2026-58115nothing found — not in the catalog
ReferenceNVD · CVE-2026-58115published — published 2026-08-11, CVSS 4.0 10
VM scannersQualys · CVE-2026-58115nothing found — no ThreatPROTECT or Security Blog post names it; the QID knowledge base needs a login
VM scannersRapid7 · CVE-2026-58115published — InsightVM coverage stated
VM scannersTenable · CVE-2026-58115nothing found — no plugin names the CVE yet
EDR / endpoint VMCrowdStrike blognothing found — no post names it among the feed's 10 newest items
EDR / endpoint VMMicrosoft Security blognothing found — no post names it among the feed's 10 newest items
EDR / endpoint VMSentinelOne blognothing found — no post names it among the feed's 10 newest items
EDR / endpoint VMSentinelOne Labsnothing found — no post names it among the feed's 10 newest items
WAF / edgeAkamai blognothing found — no post names it among the feed's 1183 newest items
WAF / edgeCloudflare WAF managed-ruleset changelognothing found — no post names it among the feed's 139 newest items
Cloud / containerWiz blognothing found — no post names it among the feed's 717 newest items
Linux distro errataDebian tracker · CVE-2026-58115published — tracker entry
Linux distro errataRed Hat · CVE-2026-58115nothing found — no Red Hat entry
IDS / researchCisco Talos blognothing found — no post names it among the feed's 15 newest items
IDS / researchEmerging Threats open · CVE-2026-58115nothing found — no open rule names it (exploit, web_server, web_specific_apps sets)
Detection contentElastic detection rulesnothing found — no rule file names IoT2050 / CVE-2026-58115 / Node-RED
Detection contentElastic Security Labsnothing found — no post names it among the feed's 102 newest items
Detection contentSigmaHQ rulesnothing found — no rule file names IoT2050 / CVE-2026-58115 / Node-RED
Detection contentSplunk ESCUnothing found — no rule file names IoT2050 / CVE-2026-58115 / Node-RED
CommunityNuclei template · CVE-2026-58115nothing found — no template under http/cves
MSSP / IR firmsArctic Wolf blognothing found — no post names it among the feed's 10 newest items
MSSP / IR firmsHuntress blognothing found — no post names it among the feed's 754 newest items
MSSP / IR firmsRapid7 blognothing found — no post names it among the feed's 20 newest items
MSSP / IR firmsSophos threat researchnothing found — no post names it among the feed's 15 newest items
ResearchUnit 42nothing found — no post names it among the feed's 15 newest items

Checked automatically 2026-11-10 11:17Z from public sources: 4 published, 23 nothing found, 0 not machine-checkable, 0 failed. "Nothing found" means the public source answered and had nothing, as of that moment; a feed covers only its newest posts. Re-checked daily.

What a person would still look up (4)
VM scannersLook up whether a check exists for CVE-2026-58115 and IoT2050 firmware versions.
EDR / endpointCheck for Linux sensor support on IoT2050/Node-RED hosts and for node-to-shell child-process telemetry.
Network / IDSCheck for rules on unauthenticated POST /flows and egress to the listed IPs.
Threat intelConfirm that the IoC IPs and filenames are loaded in blocklists.

Exposure queries — generated automatically

Where each CVE comes from: CVE-2026-58115 — Attackers exploit Siemens SIMATIC IoT2050 Node-RED flaw (CVE-2026-58115) to plant command backdoors. A product row answers "is the software from that story reachable from the internet", not "is this card about that software".

shodan · cve · CVE-2026-58115

vuln:CVE-2026-58115

open · Shodan tags a service with a CVE from its banner version; a paid-tier filter. Exact for this CVE, blind to a host Shodan has not fingerprinted.

0match this spelling on Shodan · 2026-11-10 — Shodan has tagged no banner with this CVE yet; its tagging follows its own version fingerprinting, not the advisory▬ 0 on 2026-11-03 (+0) · 0 on 2026-11-09 (+0)

shodan · alias · card

http.title:"Node-RED"

open · Banner spelling suggested by the model from the card text (default editor page title of the Node-RED web interface exposed without adminAuth); counted against Shodan before it was shown.

13,688services internet-wide on Shodan · 2026-11-10▼ 14,001 on 2026-11-03 (-313 -2%) · 13,941 on 2026-11-09 (-253 -2%)

shodan · alias · card

http.html:"Node-RED Flow Editor"

open · Banner spelling suggested by the model from the card text (text shown on the Node-RED editor page); counted against Shodan before it was shown.

3services internet-wide on Shodan · 2026-11-10▬ 3 on 2026-11-04 (+0 +0%) · 3 on 2026-11-09 (+0 +0%)

Internet-wide count, trend

QueryFirstLatestChange
vuln:CVE-2026-581150 2026-11-030 2026-11-10+0 over 8 days
http.title:"Node-RED"14,001 2026-11-0313,688 2026-11-10-313 (-2%) over 8 days
http.html:"Node-RED Flow Editor"3 2026-11-043 2026-11-10+0 (+0%) over 7 days

Shodan's count of matching services on the whole internet, one point a day; the scope (your ranges) is never part of it. A count moves with Shodan's crawl as much as with patching, so read the direction, not the digit.

NVD has not published CPE configurations for these CVEs yet, so only the CVE query is exact; the product queries use the name the campaign gives (Siemens SIMATIC IoT2050 Advanced, Node-RED) and are replaced by NVD's spelling at the daily re-check once it names the software.

Also tried under the name the card uses, nothing matched on Shodan: product:"Siemens SIMATIC IoT2050 Advanced", http.component:"Siemens SIMATIC IoT2050 Advanced", product:"Node-RED", http.component:"Node-RED", host.services: (software.product = "Siemens SIMATIC IoT2050 Advanced"), host.services: (software.product = "Node-RED").

Banner spellings: a model read 3 from the NVD names and this card's text (former and marketing names, console titles); 2 matched something on Shodan and are shown above, the rest was dropped.

Scope every query in your own tool, never in a shared document: Shodan `net:<your_ranges>`, `org:"<your_org>"` or `hostname:<your_domain>` (or a Shodan Monitor network alert, which applies the scope for you); Censys `host.ip: <your_ranges>` or `host.dns.names: <your_domain>`. Then compare the banner version with the affected range. Generated automatically 2026-11-10 11:17Z from the CVE ids and NVD's CPE configurations, each Shodan query counted against Shodan itself; re-built daily with the coverage check.

Open questions

Sources

Public OSINT only. AI-generated by the pipeline; structure follows the DAIR model from Dynamic Incident Response (Joshua Wright). Published automatically; a dismissed draft unpublishes it.

One mail per new card, after you confirm by link; an unsubscribe link in every mail. The address is used for nothing else.