Node-RED im Einsatz und unklar, ob die Instanz ohne Anmeldung erreichbar ist? WZ-IT prüft Node-RED-Instanzen auf Erreichbarkeit und Konfiguration, richtet adminAuth und den Zugriff über VPN ein und betreibt Node-RED mit Monitoring und Wartung, siehe Node-RED, IoT und CVE-Monitoring. Termin vereinbaren
Am 11. August 2026 hat Siemens das Advisory SSA-834709 zu fehlender Authentifizierung in Node-RED auf SIMATIC-IoT2050-Geräten veröffentlicht, mit der Kennung CVE-2026-58115 und CVSS 10.0. Am 2. November 2026 berichtete VulnCheck, dass ein Honeypot am 30. Oktober einen vollständigen Angriff aufgezeichnet hat: Ein einziger Request an die Admin-API übergab einen Flow, der einen Linux-Bot nachladen und starten sollte. Medien wie The Register berichteten ab dem 2. November.
Die Berichte vermischen zwei Dinge. Die Kennung gehört zu einem Siemens-Produkt. Der beobachtete Angriff trifft aber nach Angabe von VulnCheck Node-RED-Instanzen ohne adminAuth. Dieser Beitrag trennt beides anhand der Primärquellen, nennt Versionen, Bewertung und Ausnutzungsstatus in Tabellen und liefert Prüfbefehle und ein Konfigurationsbeispiel für Administratoren. Alle Angaben haben den Stand 9. November 2026.
Inhaltsverzeichnis
- Die Lücke in Kürze
- Kernlücke oder Produktlücke: Was die Quellen sagen
- Betroffene Geräte und Fixversion
- Was VulnCheck beobachtet hat
- Exploit-Status und KEV
- Welche Node-RED-Installationen gefährdet sind
- Prüfbefehle für Administratoren
- adminAuth in der settings.js einrichten
- Editor nicht öffentlich erreichbar machen
- Anzeichen einer Kompromittierung
- Checkliste: Node-RED absichern
- Unser Vorgehen bei WZ-IT
- Weiterführende Guides
Die Lücke in Kürze
| Merkmal | Wert |
|---|---|
| Kennung | CVE-2026-58115 |
| Vergeben von | Siemens ProductCERT |
| Advisory | SSA-834709, Titel: Missing Authentication Vulnerability in Node-RED on SIMATIC IoT2050 with Industrial OS |
| Veröffentlicht | 11. August 2026; Revision V1.1 vom 4. November 2026 (Modellliste, Titel und Zusammenfassung präzisiert) |
| Schweregrad | kritisch, CVSS 3.1 10.0 und CVSS 4.0 10.0 (Bewertung durch Siemens) |
| CVSS-3.1-Vektor | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| CWE | CWE-306, Missing Authentication for Critical Function |
| Voraussetzung | Netzzugriff auf die Node-RED-HTTP-Schnittstelle, keine Anmeldung nötig |
| Folge | Anlegen eigener Flows und Codeausführung auf dem Gerät mit höchsten Rechten |
| Betroffen | vier SIMATIC-IoT2050-Modelle mit Industrial OS und installiertem Node-RED, Versionen unter V4.3.4-1 |
| Behoben | V4.3.4-1 oder neuer |
| NVD-Status | Awaiting Analysis (die CVSS-Werte stammen von Siemens) |
| Ausnutzung | laut VulnCheck seit 30. Oktober 2026 beobachtet |
| CISA KEV | nicht enthalten (Katalogversion 2026.11.06) |
Quellen: Siemens SSA-834709, NVD CVE-2026-58115, VulnCheck.
Der Vektor beschreibt eine Lücke, die über das Netz ohne Rechte und ohne Nutzerinteraktion ausnutzbar ist. S:C (Scope Changed) bedeutet nach der CVSS-3.1-Spezifikation, dass die Schwachstelle Ressourcen in Komponenten jenseits ihres eigenen Sicherheitsbereichs beeinträchtigen kann. Siemens hat die Lücke so eingestuft.
Kernlücke oder Produktlücke: Was die Quellen sagen
Die Frage, ob CVE-2026-58115 eine Lücke in Node-RED selbst ist, beantworten die Quellen auf drei Ebenen unterschiedlich.
| Ebene | Befund | Beleg |
|---|---|---|
| CVE-Eintrag | Produkt-CVE von Siemens. Genannt sind ausschließlich vier SIMATIC-IoT2050-Modelle "running Industrial OS with Node-RED installed" mit Versionen unter V4.3.4-1. Es gibt keinen Versionsbereich für Node-RED selbst. | Siemens, NVD |
| Node-RED-Projekt | Wir haben keine CVE und kein Security-Advisory des Projekts zu diesem Fall gefunden; die Liste im Repository enthält nur zwei Meldungen vom 19. Februar 2021. Die Releases 5.0.9 und 4.1.17 vom 21. Oktober 2026 enthalten keine Änderung, die eine Anmeldung standardmäßig aktiviert. Die Dokumentation hält fest: "By default, the Node-RED editor is not secured". | GitHub Advisories, Changelog, Release 4.1.17, Doku |
| Beobachtete Angriffe | VulnCheck: "Node-RED instances without adminAuth are being found and exploited automatically". Der Angriff läuft über die Admin-API (POST /flows). Ausnutzung gegen Siemens-Produkte hat VulnCheck nicht beobachtet. |
VulnCheck |
Einordnung. Nach den Quellen ist CVE-2026-58115 eine Produktlücke von Siemens: Auf den betroffenen Geräten wird für die Node-RED-HTTP-Schnittstelle keine Anmeldung erzwungen ("do not enforce authentication"). Für den Node-RED-Kern haben wir weder einen Fix noch ein Advisory gefunden, und das Projekt dokumentiert den offenen Zustand ohne Konfiguration als Standard. Nach unserer Einschätzung ist das keine Schwachstelle im Code von Node-RED, sondern ein Betriebszustand: Der Angriff funktioniert gegen Instanzen, deren Admin-API ohne Anmeldung erreichbar ist, etwa im Auslieferungszustand ohne adminAuth, sobald der Angreifer den Port erreicht. Dass VulnCheck die Siemens-Kennung für alle diese Instanzen verwendet, ist eine Zuordnung von VulnCheck und steht so nicht in der Siemens-Advisory. VulnCheck weist selbst darauf hin, dass die Beschreibung auf der Canary-Signatur und dem beobachteten Verkehr beruht. Ein Statement des Node-RED-Projekts zu dem Fall haben wir nicht gefunden.
Die Fehlerklasse ist nicht neu. Für den Industrie-PC IndustrialPI 4 von Pilz gilt seit 2025 dasselbe Muster: VDE-2025-045 beschreibt, dass für den Node-RED-Server standardmäßig keine Authentifizierung konfiguriert ist, ebenfalls mit CVSS 10.0. Die folgende Tabelle grenzt die Fälle voneinander ab; FUXA ist ein anderes Produkt, das Node-RED nur als Plugin einbindet.
| Kennung | Produkt | Ursache | Fix |
|---|---|---|---|
| CVE-2026-58115 | SIMATIC IoT2050 mit Industrial OS | keine Authentifizierung an der Node-RED-HTTP-Schnittstelle | V4.3.4-1 oder neuer |
| CVE-2025-41656 | Pilz IndustrialPI 4, Firmware Bullseye bis 2024-08 | Authentifizierung am Node-RED-Server nicht standardmäßig konfiguriert | Herstellerdokument von Pilz, siehe VDE-2025-045 |
| CVE-2026-25938 | FUXA 1.2.8 bis 1.2.10 (SCADA/HMI) | Authentifizierungsumgehung bei aktiviertem Node-RED-Plugin | FUXA 1.2.11 laut Hersteller-Advisory; Talos beschreibt eine Folgelücke im selben Pfad, CVE-2026-42922, laut Herstellerhinweis in der Talos-Meldung behoben in FUXA 1.3.3 |
Betroffene Geräte und Fixversion
| Gerät | Bestellnummer | Betroffen | Behoben |
|---|---|---|---|
| SIMATIC IoT2050 Advanced | 6ES7647-0BA00-1YA2 | alle Versionen unter V4.3.4-1 mit Industrial OS und installiertem Node-RED | V4.3.4-1 oder neuer |
| SIMATIC IoT2050 Basic | 6ES7647-0BA00-0YA2 | wie oben | V4.3.4-1 oder neuer |
| SIMATIC IoT2050 M.2 | 6ES7647-0BB00-1YA2 | wie oben | V4.3.4-1 oder neuer |
| SIMATIC IoT2050 SM | 6ES7647-0CA00-1AA2 | wie oben | V4.3.4-1 oder neuer |
Quelle: Siemens SSA-834709, Stand Revision V1.1 vom 4. November 2026.
Fünf Hinweise zur Einordnung:
- Nur mit installiertem Node-RED. Die Advisory gilt für Geräte, auf denen Industrial OS mit Node-RED läuft. Ohne installiertes Node-RED besteht diese Angriffsfläche nicht.
- Modellliste. Die Revision V1.1 vom 4. November hat laut Revisionshistorie die Liste der betroffenen Produkte präzisiert sowie Titel und Zusammenfassung angepasst. Die CISA-Meldung ICSA-26-237-03 führt dagegen nur die IoT2050 Advanced. Maßgeblich ist die aktuelle Siemens-Fassung mit vier Modellen.
- Schreibweise der Version. Siemens schreibt V4.3.4-1, die maschinenlesbare Fassung (CSAF) und manche Datenbanken
4.3.4.1. Gemeint ist derselbe Stand. - Maßnahmen ohne Update. Siemens nennt zwei: Node-RED deinstallieren oder die Installation nach dem Node-RED-Handbuch härten. Außerdem sollen Geräte nur in einem geschützten Netz betrieben werden, nach den Industrial-Security-Richtlinien von Siemens.
- Was die Advisory nicht sagt. Sie nennt keinen Befehl, mit dem sich die installierte Version auslesen lässt, und beschreibt nicht, welche Anmeldung das behobene Image voreinstellt. Die Version ist nach den Siemens-Produktunterlagen zu ermitteln; ob der Zugang nach dem Update geschützt ist, zeigen die Prüfbefehle weiter unten.
Was VulnCheck beobachtet hat
VulnCheck beschreibt die Beobachtung im Bericht Exploitation Targeting Node-RED (2. November 2026, Update vom 1. November). Die Angaben stammen aus der Canary-Telemetrie von VulnCheck, einer Honeypot-Infrastruktur.
| Datum | Ereignis |
|---|---|
| 11.08.2026 | Siemens veröffentlicht SSA-834709 |
| 27.10.2026 | VulnCheck veröffentlicht Erkennungsartefakte für Kunden (Exploit-PoC, Versionsscanner, Erkennungsregeln) |
| 30.10.2026 | Ein Canary zeichnet einen vollständigen Angriff auf, 80 Tage nach der Advisory; es ist die erste Beobachtung, die VulnCheck beschreibt |
| 30.10. bis 01.11.2026 | 16 Ereignisse gegen diese CVE von derselben Adresse 4.201.105.116 (AS8075, Microsoft, Geolokation Brasilien) |
| 01.11.2026 | VulnCheck ergänzt weitere Payloads |
| 02.11.2026 | VulnCheck veröffentlicht den Bericht |
Ablauf des Angriffs. Ein einzelner POST /flows (User-Agent curl/8.5.0) übergibt einen Flow aus drei Teilen: ein leeres Tab, ein inject-Node, der einmal nach einer Sekunde auslöst, und ein exec-Node. Der exec-Node führt aus, was eine base64-kodierte Zeichenkette enthält, sodass einfache Filter auf wget oder curl im Request-Body nichts finden. Der Canary antwortete wie eine verwundbare Instanz mit HTTP 200 und einem neuen Revisions-Hash; deshalb wertet die VulnCheck-Signatur das Ereignis als erfolgreiche Ausnutzung. Der Ablauf ergibt sich aus dem entschlüsselten Befehl; einen Download oder eine Ausführung auf dem Canary weist der Bericht nicht aus.
| Payload | Befehl laut VulnCheck | Spuren |
|---|---|---|
| Bot | lädt bot-linux-amd64 von 85.215.73.250:8080, speichert als /dev/shm/.b, macht es ausführbar und startet es mit setsid, ersatzweise nohup |
/dev/shm/.b (RAM-Dateisystem, nach Neustart des Hosts weg) |
| Skript | lädt wget.sh von derselben Adresse nach /tmp/.s und führt es aus |
/tmp/.s |
| Zweiter Server | lädt /.sys_update von 45.194.90.57:38472, speichert als /tmp/.kworker (ahmt einen Kernel-Thread nach) und startet es mit nohup |
/tmp/.kworker |
| Backdoor | kein Download; ein Flow mit HTTP-In-Endpunkt (etwa /cmd oder ein zufälliger Pfad), function-Node und exec-Node mit addpay, der später Befehle per Query-Parameter ausführt |
Flow in der Flow-Konfiguration, übersteht Neustarts |
Was unbekannt ist. VulnCheck hat weder die Bot-Datei noch wget.sh oder .kworker beschafft. Ob es sich um einen Kryptominer, einen DDoS-Bot, eine Reverse Shell oder etwas anderes handelt, ist offen. Der Bericht nennt keine Hashes. Dieselbe Adresse hat laut VulnCheck in den vergangenen Tagen insgesamt 125 Treffer gegen acht CVEs in Apache Solr, Camunda, Gitea, MLflow, Traefik, Joomla und Node-RED erzielt; VulnCheck liest das als opportunistisches Massenscannen und nicht als gezielten Angriff, und betont, dass die Adresse in der Microsoft-Cloud wenig über den Betreiber sagt.
Exploit-Status und KEV
| Frage | Stand 9. November 2026 | Quelle |
|---|---|---|
| Ausnutzung beobachtet | ja, durch VulnCheck-Canaries ab 30. Oktober 2026 | VulnCheck |
| Ausnutzung gegen Siemens-Geräte beobachtet | nein, laut VulnCheck nicht beobachtet | VulnCheck |
| VulnCheck-KEV | aufgenommen | VulnCheck |
| CISA-KEV | nicht enthalten; Katalogversion 2026.11.06 vom 6. November 2026, am 9. November geprüft | CISA KEV |
| Öffentlicher Exploit | ja: Auf GitHub liegt ein öffentliches Proof-of-Concept-Skript für diese CVE (Stand 4. November 2026); ob es gegen ein echtes Siemens-Image funktioniert, haben wir nicht geprüft. Der Angriff selbst ist ein einzelner Standardaufruf der dokumentierten Admin-API | GitHub, Admin-API |
| CISA-Bewertung im NVD-Eintrag | SSVC vom 12. August 2026: exploitation none, automatable yes, technical impact total (vor den Beobachtungen) | NVD |
| Siemens-Hinweis auf Ausnutzung | keiner in der Advisory | Siemens |
Zahlen zu offen erreichbaren Instanzen nennt keine der geprüften Quellen, und wir haben keine eigenen Scan-Daten. Eine Angabe wie "Tausende offene Instanzen" ist deshalb nicht belegt.
Welche Node-RED-Installationen gefährdet sind
| Lage | Betroffen nach CVE-Eintrag | Angreifbar auf dem beobachteten Weg | Maßnahme |
|---|---|---|---|
| IoT2050 mit Industrial OS und Node-RED, Version unter V4.3.4-1 | ja | ja, wenn der Port erreichbar ist und keine Anmeldung greift | Update auf V4.3.4-1 oder neuer, Netzzugang einschränken, Node-RED härten oder deinstallieren |
| IoT2050 mit V4.3.4-1 oder neuer | nein | mit den Prüfbefehlen verifizieren | Anmeldung und Erreichbarkeit prüfen |
| Eigene Installation (Linux, Docker, Raspberry Pi, Windows) ohne adminAuth, Port aus dem Netz erreichbar | nein, nicht in der CVE | ja, sofern keine andere Zugriffskontrolle davorsitzt | adminAuth setzen, Erreichbarkeit einschränken |
| Installation mit adminAuth | nein | nein, sofern die Konfiguration keine anonymen Rechte vergibt: Die Admin-API verlangt einen Token; ein eingerichteter anonymer Standardnutzer (default) erhält die dort festgelegten Rechte, bei read Lesezugriff, bei * auch Schreibzugriff |
default-Nutzer und Rechte prüfen, httpNodeAuth und Netzzugang trotzdem prüfen |
| Installation ohne adminAuth, nur auf 127.0.0.1 | nein | nicht direkt von außen, aber für jeden Prozess auf dem Host und über jeden Proxy oder Tunnel, der auf den Port weiterleitet | adminAuth setzen |
Installation ohne adminAuth, aber Admin-API abgeschaltet (httpAdminRoot: false) oder durch eine vorgeschaltete Zugriffskontrolle geschützt |
nein | nicht auf dem beobachteten Weg, solange diese Kontrolle greift | Kontrolle von außen testen, adminAuth zusätzlich setzen |
| Node-RED als Bestandteil eines Drittprodukts (SCADA, HMI, Gateway) | je Hersteller | je Konfiguration | Herstellerhinweise lesen, Produkt auf Anmeldung prüfen |
Drei Annahmen, die sich nicht halten lassen:
- "Es ist ein Node-RED-Bug, also hilft ein Update." Die Releases 5.0.9 und 4.1.17 ändern den Standard nicht; die Anmeldung muss konfiguriert werden.
- "Die Instanz steht hinter einer Firewall." Das verringert die Angreifer auf Hosts mit Netzzugang, schützt aber nicht vor jedem Rechner im selben Netz. Bei Docker kommt hinzu, dass veröffentlichte Ports an den Firewall-Regeln von ufw vorbeilaufen (siehe unten).
- "Ein geänderter Pfad für den Editor schützt."
httpAdminRootverschiebt die Pfade, ist aber keine Zugriffskontrolle.
Prüfbefehle für Administratoren
Alle Befehle dürfen nur gegen eigene Systeme laufen. Die Ausgaben zeigen, wie die Instanz im Netz steht.
1. Auf welcher Adresse lauscht Node-RED?
sudo ss -tlnp | grep 1880
Steht in der Ausgabe 0.0.0.0:1880, *:1880 oder [::]:1880, lauscht der Prozess auf allen Schnittstellen. Bei 127.0.0.1:1880 ist er direkt nur lokal erreichbar; ein Proxy oder Tunnel auf dem Host kann ihn weiterreichen. Der Port 1880 ist der Standard (uiPort); wurde er geändert, die eigene Nummer einsetzen.
2. Docker: Wie ist der Port veröffentlicht?
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}'
Unter Ports bedeutet 0.0.0.0:1880->1880/tcp oder [::]:1880->1880/tcp, dass der Port auf allen Schnittstellen des Hosts veröffentlicht ist. 127.0.0.1:1880->1880/tcp ist ab Docker 28.0.0 nur vom Host aus erreichbar (zu älteren Versionen siehe unten). Docker nennt veröffentlichte Ports "insecure by default" (Docker, Port publishing) und leitet den Verkehr vor den ufw-Regeln um, sodass eine ufw-Sperre veröffentlichte Ports nicht schützt (Docker, Packet filtering).
3. Ist die Anmeldung aktiv?
curl -s --max-time 5 http://127.0.0.1:1880/auth/login; echo
curl -s -o /dev/null -w '%{http_code}\n' --max-time 5 http://127.0.0.1:1880/flows
Nach der Admin-API liefert /auth/login bei inaktiver Anmeldung {}. Bei aktiver Anmeldung kommt ein Objekt mit "type":"credentials", bei Anmeldung über Passport-Strategien mit "type":"strategy" (Quellcode). GET /flows antwortet ohne Token mit HTTP 200, wenn die Instanz offen ist oder ein anonymer Standardnutzer mit Leserecht eingerichtet ist (Dokumentation), und mit HTTP 401, wenn ein Token verlangt wird. Der Statuscode allein zeigt nicht, welche Komponente antwortet: Auch ein vorgeschalteter Proxy kann 401 liefern. Aussagekräftig ist die Kombination aus /auth/login und /flows. Einen Deploy-Versuch (POST /flows) enthält die Prüfung bewusst nicht. Hat die Instanz httpAdminRoot gesetzt, steht der Pfad dahinter, etwa /admin/flows.
4. Dieselbe Prüfung von einem anderen Rechner im Netz. 127.0.0.1 durch die Adresse des Servers ersetzen. Liefert /auth/login von dort {}, ist die Admin-API zumindest von diesem Rechner aus ohne Node-RED-Anmeldung erreichbar; ob das für andere Quelladressen genauso gilt, hängt von vorgeschalteten Kontrollen wie Firewall oder Proxy ab. Liefert /flows HTTP 200 und ist die Antwort ein JSON-Array mit Node-Objekten, ist mindestens Lesezugriff möglich; ein Statuscode 200 allein kann auch von einer Proxy- oder Fallback-Seite stammen. Mit einem kleinen Skript lassen sich mehrere Instanzen nacheinander prüfen:
#!/usr/bin/env bash
# Prüft eine eigene Node-RED-Instanz: Ist die Admin-API ohne Anmeldung erreichbar?
# Aufruf: ./check-nodered.sh http://192.0.2.10:1880
BASE="${1:-http://127.0.0.1:1880}"
login=$(curl -s --max-time 5 "$BASE/auth/login")
echo "Anmeldeschema (GET /auth/login): ${login:-keine Antwort}"
code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 5 "$BASE/flows")
echo "GET /flows ohne Token: HTTP $code"
case "$code" in
200)
if [ "$login" = "{}" ]; then
echo "-> OFFEN: keine Anmeldung aktiv, Flows lesbar, Deploy ohne Anmeldung zu erwarten"
else
echo "-> Flows ohne Token lesbar, Anmeldung aktiv: anonymen Standardnutzer und dessen Rechte prüfen"
fi ;;
401) echo "-> Token verlangt (adminAuth oder vorgeschaltete Zugriffskontrolle)" ;;
000) echo "-> nicht erreichbar" ;;
*) echo "-> unerwartet, Pfad-Präfix (httpAdminRoot) und Proxy prüfen" ;;
esac
Das Skript haben wir gegen einen lokalen Testserver geprüft, der die in der Admin-API-Dokumentation beschriebenen Antworten nachbildet: offene Instanz, aktive Anmeldung, anonymer Lesezugriff, Statuscode 401 ohne Anmeldeschema, unerwarteter Statuscode und nicht erreichbarer Server. Eine echte Node-RED-Instanz war nicht Teil des Tests.
adminAuth in der settings.js einrichten
Die Einstellung adminAuth schützt den Editor und die Admin-API. In der mitgelieferten settings.js ist sie auskommentiert (Vorlage im Repository). Die Datei liegt bei einer Installation per Skript im Benutzerverzeichnis ~/.node-red/settings.js, im offiziellen Docker-Image unter /data/settings.js. Welche Datei Node-RED lädt, steht beim Start in der Log-Zeile "Settings file".
Schritt 1: Passwort-Hash erzeugen.
node-red admin hash-pw
Der Befehl existiert ab Node-RED 1.1.0 und fragt das Passwort ab. Im Docker-Container läuft er so, wie es das Docker-Image vorsieht:
docker exec -it mynodered npx node-red admin hash-pw
Der ausgegebene Wert ist ein bcrypt-Hash und beginnt mit $2a$ oder $2b$. Die Beispiel-Hashes aus der Dokumentation gehören zu bekannten Passwörtern und dürfen nicht übernommen werden.
Schritt 2: Block in der settings.js eintragen. Die folgende Konfiguration folgt der offiziellen Anleitung; Hashes sind Platzhalter:
module.exports = {
uiPort: process.env.PORT || 1880,
// Gesamten HTTP-Listener (Editor, Admin-API, HTTP-In, Dashboard) nur auf dem lokalen Host
// oder einer VPN-Adresse annehmen (im Docker-Container weglassen, siehe unten)
uiHost: "127.0.0.1",
// Editor und Admin-API: Anmeldung erzwingen
adminAuth: {
type: "credentials",
users: [
{
username: "admin",
password: "$2b$08$HASH-AUS-hash-pw-HIER-EINTRAGEN",
permissions: "*"
},
{
username: "lesezugriff",
password: "$2b$08$ANDERER-HASH-AUS-hash-pw",
permissions: "read"
}
],
sessionExpiryTime: 86400
},
// HTTP-In-Routen und node-red-dashboard: eigener Benutzer, eigener Hash
httpNodeAuth: { user: "dashboard", pass: "$2b$08$DRITTER-HASH-AUS-hash-pw" }
};
In einer vorhandenen settings.js werden nur die Zeilen uiHost, adminAuth und httpNodeAuth ergänzt oder einkommentiert; der übrige Inhalt bleibt. Im Docker-Container entfällt uiHost (siehe unten). Die Syntax des Beispiels haben wir mit Node.js geladen und geprüft; mit einer laufenden Node-RED-Instanz haben wir es nicht getestet.
Schritt 3: Node-RED neu starten.
| Betriebsart | Neustart |
|---|---|
| Installation per Raspberry-Pi-Skript | node-red-restart oder sudo systemctl restart nodered |
| Docker | docker restart mynodered |
| Anderer systemd-Dienst | sudo systemctl restart <dienstname> |
Schritt 4: Ergebnis prüfen. GET /auth/login zeigt "type":"credentials", und GET /flows liefert ohne Token HTTP 401 (Prüfbefehl 3), solange kein anonymer Standardnutzer eingerichtet ist. Erscheint beim Öffnen des Editors kein Anmeldedialog, wurde meist eine andere Datei bearbeitet als die, die Node-RED lädt, oder der Dienst wurde nicht neu gestartet.
| Einstellung | Schützt | Schützt nicht |
|---|---|---|
adminAuth |
Editor und Admin-API (/flows, /settings, /nodes und weitere) |
HTTP-In-Routen, Dashboard |
httpNodeAuth |
HTTP-In-Routen und laut Vorlage node-red-dashboard per Basic Auth | Editor und Admin-API |
httpStaticAuth |
statische Inhalte aus httpStatic |
Editor und Admin-API |
uiHost |
begrenzt die Adresse des gesamten HTTP-Listeners (Editor, Admin-API, HTTP-In-Routen, Dashboard) | die Anmeldung selbst |
https |
verschlüsselt die Übertragung der Anmeldung | den Zugriff als solchen |
httpAdminRoot: false |
schaltet die HTTP-Endpunkte von Admin-API und Editor ab | die Flow-Datei und programmatische Zugriffe auf die Runtime (eingebettete Anwendungen) |
disableEditor: true |
schaltet nur die Editor-Oberfläche ab | die Admin-API bleibt aktiv |
Quelle: Node-RED, Securing Node-RED und Konfiguration. Über permissions: "read" lassen sich Nutzer mit reinem Lesezugriff anlegen; mit default: { permissions: "read" } in adminAuth erhält zusätzlich jeder ohne Anmeldung diesen Lesezugriff, was die Anleitung als Option beschreibt. Die Rechte des Standardnutzers sind frei wählbar; mit permissions: "*" hätte jeder ohne Anmeldung auch Schreibzugriff. Vorgeschaltete Zugriffskontrollen wie ein Reverse Proxy oder httpAdminMiddleware können die Admin-API ebenfalls absichern; adminAuth ist die in der Anleitung beschriebene Standardlösung. Wer den Editor über OAuth oder OpenID anmelden möchte, findet in der Anleitung die Variante mit Passport-Strategien.
Editor nicht öffentlich erreichbar machen
adminAuth ist die erste Schicht. Die zweite ist, dass der Editor gar nicht erst aus dem Internet erreichbar ist. Das Admin-Interface braucht in der Regel nur ein kleiner Kreis von Administratoren.
-
Nur lokal oder an einer VPN-Adresse binden. Mit
uiHost: "127.0.0.1"lauscht Node-RED nur lokal, und zwar mit dem gesamten HTTP-Listener: Auch HTTP-In-Routen und Dashboards sind dann nur lokal erreichbar. Soll der Editor über ein privates Netz erreichbar sein, kannuiHostauf die VPN-Adresse des Hosts zeigen. Standard ist0.0.0.0, also alle IPv4-Schnittstellen (Konfigurationsdokumentation). Im Docker-Container bleibtuiHostunverändert (siehe nächster Punkt). -
Docker-Port nur an localhost veröffentlichen. Docker leitet veröffentlichte Ports im Standard-Bridge-Netz an die Adresse des Containers weiter; ein Prozess, der im Container nur auf
127.0.0.1lauscht, nimmt diese Verbindungen nicht an. Node-RED bleibt im Container deshalb bei0.0.0.0, und die Begrenzung steht allein in der Host-Adresse des-p-Flags. Statt-p 1880:1880den Port mit Adresse angeben:docker run -d -p 127.0.0.1:1880:1880 -v node_red_data:/data --name mynodered nodered/node-redIn Compose lautet der Eintrag
"127.0.0.1:1880:1880"unterports. In Docker-Versionen vor 28.0.0 konnten Rechner im selben Layer-2-Segment auch an localhost veröffentlichte Ports erreichen (Docker, Port publishing); bei älteren Docker-Hosts ist ein Update ratsam. -
Zugriff über Mesh-VPN oder WireGuard. Administratoren erreichen den Editor dann nur mit einem Gerät, das im privaten Netz angemeldet ist. Das Muster beschreiben die Seiten zu VPN und Secure Access und zu NetBird sowie der Beitrag VPN ablösen: Zero Trust und Mesh-VPN.
-
Reverse Proxy nur für HTTP-In-Pfade. Müssen Webhooks oder ein Dashboard öffentlich sein, gehören nur die dafür vorgesehenen Pfade (
httpNodeRoot, etwa/ui) hinter den Proxy, mithttpNodeAuthoder einem Token im Flow. Die Pfade der Admin-API (/flows,/auth,/settings,/nodes) bleiben draußen. Der Editor hält eine WebSocket-Verbindung zur Runtime offen (Quellcode comms.js); läuft er hinter einem Proxy, muss dieser sie weiterreichen. -
Firewall am Perimeter. Port 1880 am Eingang des Netzes sperren und das Ergebnis von außen prüfen, nicht nur die Regel lesen.
-
Keine unnötigen Rechte. Node-RED als eigener Benutzer betreiben statt als root. Für den Container gilt dasselbe; wo es nicht nötig ist, kein
-u rootund keinen Docker-Socket einhängen.
Diese Schichten ersetzen adminAuth nicht, sondern ergänzen es. Sind VPN und adminAuth unabhängig voneinander konfiguriert, reicht ein Fehler in einer der beiden Schichten allein in der Regel nicht für einen Zugriff; eine Garantie ist das nicht.
Anzeichen einer Kompromittierung
Die Prüfpunkte folgen den Spuren aus dem VulnCheck-Bericht. Dass sie nicht gefunden werden, beweist keine Sauberkeit: Die Angreifer können Dateinamen und Adressen wechseln, und VulnCheck kennt die Funktion der Schadsoftware nicht.
| Indikator | Prüfung |
|---|---|
| exec-Nodes oder HTTP-In-Endpunkte, die niemand angelegt hat | Flows-Datei durchsuchen (Befehl unten) |
exec-Node, dessen Befehl base64-kodierten Inhalt an die Shell übergibt, oder mit wget und curl |
Flows-Datei, Editor |
HTTP-In-Endpunkt /cmd oder zufälliger Pfad, verbunden mit function-Node und exec-Node mit addpay |
Flows-Datei, Editor |
Dateien /dev/shm/.b, /tmp/.s, /tmp/.kworker |
ls -la /dev/shm/.b /tmp/.s /tmp/.kworker 2>/dev/null |
Prozesse aus /dev/shm oder mit Namen .kworker (.sys_update ist laut Bericht der Dateiname auf dem Download-Server) |
ps -eo pid,user,args und nach den Namen filtern (Befehl unten) |
Verbindungen zu 85.215.73.250 (Port 8080) und 45.194.90.57 (Port 38472) |
Verbindungsprotokolle von Firewall und Proxy, ss -tnp; die Downloads nutzen IP-Adressen, DNS-Logs zeigen sie deshalb nicht |
Zugriffe von 4.201.105.116 |
Logs von Reverse Proxy, Firewall oder Host |
| Unerwartete Änderungszeit der Flows-Datei | ls -l --time-style=long-iso ~/.node-red/flows.json (bei Docker /data/flows.json) |
# Flows mit Befehlsausführung oder eingehenden HTTP-Routen auflisten
jq -r '.[] | select(.type=="exec" or .type=="http in") | [.type, .id, (.command // .url // "")] | @tsv' ~/.node-red/flows.json
# Ohne jq
grep -n -E '"type": ?"(exec|http in)"' ~/.node-red/flows.json
# Spuren aus dem VulnCheck-Bericht auf dem Host
ls -la /dev/shm/.b /tmp/.s /tmp/.kworker 2>/dev/null
ps -eo pid,user,args | grep -E '/dev/shm|\.kworker|\.sys_update' | grep -v grep
sudo ss -tnp | grep -E '85\.215\.73\.250|45\.194\.90\.57'
Bei Docker liegt die Datei im Volume; der Inhalt lässt sich mit docker exec mynodered cat /data/flows.json | jq ... auswerten. Die Pfade gelten für die Standardeinstellungen; flowFile und userDir in der settings.js sowie Node-RED-Projekte können sie verschieben. Ein exec-Node ist nicht von sich aus verdächtig, viele Flows nutzen ihn legitim. Auffällig sind exec-Nodes ohne bekannten Zweck, mit kodierten Befehlen oder hinter einem HTTP-In-Endpunkt.
Wenn Spuren vorliegen oder ein Missbrauch nicht auszuschließen ist:
- Instanz vom Netz trennen, Flows-Datei, Logs und Prozessliste sichern, bevor etwas verändert wird.
- Alle auf dem Host lesbaren Zugangsdaten als kompromittiert behandeln und rotieren: Zugänge aus Flows (MQTT, Datenbanken, APIs), SSH-Schlüssel, Cloud-Token. Das ist unsere Einschätzung; die Quellen nennen keine Liste.
- Host oder Container aus einem sauberen Zustand neu aufsetzen und die Flows vor der Wiederverwendung Node für Node prüfen. Ein Update allein entfernt eingeschleuste Flows nicht.
- adminAuth und die Netzbeschränkung setzen, bevor die Instanz wieder ans Netz geht.
- Meldepflichten prüfen. Eine Verletzung des Schutzes personenbezogener Daten hat der Verantwortliche nach Art. 33 DSGVO unverzüglich und möglichst binnen 72 Stunden nach Bekanntwerden der Aufsichtsbehörde zu melden, es sei denn, sie führt voraussichtlich nicht zu einem Risiko für die Rechte und Freiheiten natürlicher Personen; ein Auftragsverarbeiter meldet eine Verletzung dem Verantwortlichen unverzüglich. Bei voraussichtlich hohem Risiko benachrichtigt der Verantwortliche nach Art. 34 DSGVO auch die Betroffenen unverzüglich, vorbehaltlich der Ausnahmen in Art. 34 Abs. 3 (EDPB). Einrichtungen im Anwendungsbereich der NIS-2-Richtlinie übermitteln zu erheblichen Sicherheitsvorfällen nach Art. 23 Abs. 4 eine Frühwarnung unverzüglich und spätestens binnen 24 Stunden nach Kenntnis des Vorfalls, eine Vorfallmeldung binnen 72 Stunden nach Kenntnis (Vertrauensdiensteanbieter: 24 Stunden), auf Anforderung einen Zwischenbericht und spätestens einen Monat nach der Vorfallmeldung einen Abschlussbericht; dauert der Vorfall dann noch an, folgen ein Fortschrittsbericht und der Abschlussbericht binnen eines Monats nach Behandlung des Vorfalls. Anwendungsbereich und Einzelheiten richten sich nach dem nationalen Umsetzungsrecht. Welche Pflicht greift, hängt von der Rolle (Verantwortlicher oder Auftragsverarbeiter), davon ab, ob personenbezogene Daten betroffen waren, ob die Einrichtung erfasst ist und wie erheblich der Vorfall ist. Die Bewertung im Einzelfall sollte mit dem Datenschutzbeauftragten oder der Rechtsberatung erfolgen; die Verantwortung bleibt beim jeweils Verpflichteten.
Checkliste: Node-RED absichern
| Bereich | Maßnahme | Bezug zur Lücke |
|---|---|---|
| Bestand | alle Node-RED-Instanzen erfassen, auch Edge-Geräte, Container und Instanzen in Drittprodukten | Voraussetzung jeder Prüfung |
| Siemens | IoT2050 mit Industrial OS und Node-RED auf V4.3.4-1 oder neuer bringen, sonst Node-RED deinstallieren oder härten | direkt: CVE-2026-58115 |
| Anmeldung | adminAuth mit bcrypt-Hash setzen, mindestens ein Admin-Konto, Lesekonten mit permissions: "read" |
beobachteter Angriffsweg |
| Anmeldung | httpNodeAuth für HTTP-In-Routen und node-red-dashboard |
getrennte Angriffsfläche |
| Netz | uiHost auf 127.0.0.1 oder VPN-Adresse (nicht im Container), Docker-Port als 127.0.0.1:1880:1880 |
verkleinert den Kreis möglicher Angreifer |
| Netz | Port 1880 am Perimeter sperren und von außen testen | Schutz vor Internet-Scans |
| Zugriff | Editor nur über VPN; Reverse Proxy nur für HTTP-In-Pfade | Admin-API nicht öffentlich |
| Transport | https oder TLS am Proxy, damit Anmeldedaten nicht im Klartext laufen |
Schutz der Anmeldung |
| Betrieb | Node-RED nicht als root, kein Docker-Socket im Container | begrenzt die Folgen einer Ausführung |
| Flows | Bestand der exec- und HTTP-In-Nodes dokumentieren und regelmäßig vergleichen | kann eingeschleuste Flows erkennbar machen |
| Zugangsdaten | Zugangsdaten in Flows auf das Nötige begrenzen, nicht mehrfach verwenden | begrenzt den Schaden |
| Monitoring | Advisories der Hersteller und Node-RED-Releases verfolgen | CVE-Monitoring |
| Backups | Benutzerverzeichnis regelmäßig sichern (Docker: das /data-Volume), mindestens Flows, settings.js, flows_cred.json und den Schlüssel dazu (credentialSecret; auch ein systemgenerierter Schlüssel gehört ins Backup), Wiederherstellung testen |
Neuaufbau nach Vorfall |
Unser Vorgehen bei WZ-IT
WZ-IT installiert, hostet und betreibt Node-RED mit Monitoring, Backups und Wartung und bindet im Rahmen der IoT-Leistungen SPS- und HMI-Systeme an. Bei einer Meldung wie CVE-2026-58115 läuft die Arbeit in fünf Schritten:
- Bestand erfassen. Node-RED-Instanzen, Versionen, Ports, Container-Zuordnungen und Geräte wie die IoT2050 aufnehmen, auch solche, die ein anderes Team angelegt hat.
- Erreichbarkeit prüfen. Mit den Befehlen oben feststellen, ob Admin-API und Editor ohne Anmeldung erreichbar sind, von innen und von außen.
- Absichern.
adminAuthundhttpNodeAuthsetzen, Bindung und Port-Zuordnung einschränken und den Zugriff über ein Mesh-VPN oder WireGuard legen. Bei IoT2050-Geräten richtet sich das Vorgehen nach der Siemens-Advisory. - Spuren prüfen. Flows und Host auf die Indikatoren durchsehen; bei Verdacht Zugangsdaten kontrolliert rotieren und die Instanz sauber neu aufsetzen.
- Dauerhaft überwachen. Instanzen in das CVE-Monitoring aufnehmen, das neben der NVD auch Hersteller-Advisories auswertet. Eine breitere Prüfung von Konfiguration und Zugängen eines Servers leistet das Server-Audit.
Support, Beratung und Implementierung durch WZ-IT.
Weiterführende Guides
- Node-RED MQTT-Dashboard für Sensordaten, wie Node-RED Messwerte aufnimmt und darstellt.
- n8n Alternative: n8n, Activepieces und Node-RED im Vergleich, Lizenz, Betrieb und Sicherheitsmeldungen der drei Werkzeuge.
- ThingsBoard, Grafana & ChirpStack im IoT-Stack, wo Node-RED im IoT-Betrieb sitzt.
- CVE-Monitoring für Self-Hosted Software, wie Schwachstellen strukturiert verfolgt werden.
- VPN ablösen: Zero Trust und Mesh-VPN, Zugang zu internen Diensten ohne öffentliche Ports.
- LiteLLM-Sicherheitslücke: Versionen prüfen und Gateway absichern, ein weiterer Fall, in dem eine Verwaltungsoberfläche abgesichert werden muss.
- IoT-Leistungen von WZ-IT und Node-RED-Betrieb, die Hubs zu diesem Thema.
- SSHole (CVE-2026-123158): OpenSSH bei Alpine prüfen - weiterer aktueller Sicherheitsfall (Stand November 2026)
- Kernel-TCP-Lücke CVE-2026-98432: Proxmox, Debian, Ubuntu patchen - weiterer aktueller Sicherheitsfall (Stand November 2026)
- APT-Lücke CVE-2026-109518 in Debian und Ubuntu - weiterer aktueller Sicherheitsfall (Stand November 2026)
- CWPdoor: Hintertür im Control Web Panel prüfen - weiterer aktueller Sicherheitsfall (Stand November 2026)
Node-RED-Instanzen prüfen lassen? Wir stellen fest, welche Instanzen ohne Anmeldung erreichbar sind, setzen adminAuth und den Zugang über VPN um und nehmen Node-RED in das CVE-Monitoring auf. Termin vereinbaren
Quellen
- Siemens ProductCERT, SSA-834709 (CVE-2026-58115)
- NVD, CVE-2026-58115
- CISA, ICSA-26-237-03 Siemens SIMATIC IoT2050 Advanced
- CISA, Known Exploited Vulnerabilities Catalog
- VulnCheck, Exploitation Targeting Node-RED, a Tool Embedded in ICS Products
- The Register, Node-RED flaw exploited (2. November 2026)
- Node-RED Docs, Securing Node-RED
- Node-RED Docs, Runtime-Konfiguration
- Node-RED Docs, Admin API: GET /auth/login
- Node-RED Docs, Admin API: GET /flows
- Node-RED Docs, Admin API: POST /flows
- Node-RED Docs, Docker
- Node-RED Docs, Raspberry Pi
- node-red-docker, README
- Node-RED, settings.js (Vorlage)
- Node-RED, Security Advisories
- Node-RED, Changelog
- Node-RED, Release 4.1.17
- Node-RED, Quellcode editor-api comms.js
- Node-RED, Quellcode editor-api auth/index.js
- Docker Docs, Port publishing and mapping
- Docker Docs, Packet filtering and firewalls
- CERT@VDE, VDE-2025-045 Pilz IndustrialPI
- NVD, CVE-2025-41656
- NVD, CVE-2026-25938
- FUXA, Security Advisory GHSA-v4p5-w6r3-2x4f
- Cisco Talos, TALOS-2026-2419 (FUXA)
- NVD, CVE-2026-42922
- FIRST, CVSS v3.1 Specification Document
- EDPB, Data breaches
- EUR-Lex, Richtlinie (EU) 2022/2555 (NIS 2)
- Siemens, Operational Guidelines for Industrial Security













