Tornar al Blog

A Node-RED no el van explotar: li van enviar tres nodes

El que va arribar a l'esquer eren tres nodes: una pestanya buida, un inject i un exec. L'inject amb once: true perquè arrenqués sol en desplegar-se, i al darrere l'exec, que és el node la feina documentada del qual és executar ordres del sistema. És el que munta qualsevol que faci servir l'eina per al que serveix.

El 30 d'octubre del 2026, un dels esquers de VulnCheck va recollir aquell enviament: un POST contra /flows. Aquella ruta no afegeix un flux. La documentació de l'API ho diu en cinc paraules —«Set the active flow configuration»— i amb el tipus de desplegament que s'aplica per defecte, full, «all existing nodes are stopped before the new configuration is started». L'enviament de l'atacant començava per una pestanya buida, així que el mateix POST que li obre la porta s'emporta les automatitzacions que hi hagués en marxa. Ningú no ho ha explicat així, i és la part que surt més cara.

L'ordre dins del node exec era echo <base64> | base64 -d | sh, amb tres capes de codificació una dins de l'altra, i al final un binari anomenat bot-linux-amd64 que es descarregava a /dev/shm/.b i s'engegava amb setsid, amb nohup de reserva. En altres intents, un guió intermedi i un fitxer a /tmp/.kworker; en alguns, webshells muntades amb un node http in que passava per un node function abans d'arribar a un altre exec. Un punt d'entrada HTTP nou, construït amb les peces de la paleta.

Un deu que puntua un ajust

L'identificador és CVE-2026-58115 i porta un 10,0 a CVSS 3.1 i un altre 10,0 a CVSS 4.0. El va assignar Siemens al seu avís SSA-834709 de l'11 d'agost del 2026, per als SIMATIC IoT2050 Advanced amb Industrial OS i Node-RED instal·lat. El resum de l'avís és una frase sense ornaments: «could allow an unauthenticated remote attacker to create malicious flows and execute arbitrary code on the underlying server with maximum privileges». La paraula que importa allà és crear.

La documentació oficial de Node-RED ho diu des de molt abans que l'avís, a la seva pròpia pàgina de seguretat: «By default, the Node-RED editor is not secured - anyone who can access its IP address can access the editor and deploy changes». I tot seguit, la condició: «This is only suitable if you are running on a trusted network». L'ajust que ho canvia es diu adminAuth i ve comentat a settings.js.

Siemens va publicar Industrial OS V4.3.4.1, i convé dir què diu i què no diu l'avís al respecte: indica «update to V4.3.4.1 or later version» sense detallar què va canviar per dins. El que sí que detalla és el que ofereix mentre actualitzes, i aquí hi ha el revelador: endurir la instal·lació de Node-RED seguint la guia del mateix projecte, o desinstal·lar Node-RED de l'aparell. Cap de les dues és un pedaç.

I no és la primera vegada que algú li posa un deu a aquest mateix ajust. El juliol del 2025, CERT@VDE va assignar CVE-2025-41656 a l'IndustrialPI 4 de Pilz, també amb 10,0, i la redacció és pràcticament la mateixa frase: «An unauthenticated remote attacker can run arbitrary commands on the affected devices with high privileges because the authentication for the Node_RED server is not configured by default». Un altre fabricant, un altre any, el mateix ajust comentat. Tretze mesos separen els dos avisos i cap de les dues vegades hi va haver res a pedaçar a Node-RED.

Això canvia on és el control. Contra un desbordament de memòria, el control és el pedaç. Aquí el pedaç de Siemens només existeix si tens l'aparell de Siemens. Si el teu Node-RED corre en una màquina virtual teva —que és com sol estar muntat—, no hi ha versió a la qual pujar per aquest CVE, perquè el CVE no és contra Node-RED sinó contra un producte que el porta a dins. El control, en el teu cas, són dues coses que no es descarreguen: adminAuth posat i l'editor sense sortida a internet.

Que un CVE porti el nom del fabricant i la fallada sigui al component que empaqueta no és nou, i ho vam explicar aquest mateix matí amb GitLab i Ruby, així que aquí no ens hi estenem. El que és diferent en aquest cas és que el component de dins es comporta exactament tal com està documentat.

Set dels vuit que va atacar no són infraestructura

La premsa ho ha explicat com una història industrial, i s'entén: ho signa Siemens, el producte és una passarel·la de planta i CISA ho va publicar com a avís de sistemes de control (ICSA-26-237-03). La telemetria de l'esquer hi afegeix una altra capa. La mateixa IP que va llançar els fluxos —4.201.105.116, en una xarxa de Microsoft, geolocalitzada al Brasil— va colpejar CVE-2026-58115 setze vegades entre el 30 d'octubre i l'1 de novembre, i els darrers dies havia acumulat 125 impactes contra vuit CVE diferents en el conjunt dels esquers de VulnCheck.

Els productes que VulnCheck anomena en aquell recompte són Apache Solr, Camunda, Gitea, MLflow, Traefik i Joomla, més el mateix Node-RED. Són set noms per a vuit CVE: del vuitè no en diu el producte, així que el que segueix val per a set de vuit i convé llegir-ho amb aquesta reserva. D'aquells set, cap no és un sistema operatiu ni un concentrador de VPN.

Tots escolten en HTTP i gairebé tots els va aixecar algú de dins per enganxar una cosa amb una altra. Dos no encaixen del tot i convé dir-ho: Traefik està dissenyat precisament per donar la cara a internet, i un Joomla sol ser un web públic que algú va encarregar. Els altres cinc sí que es van dissenyar donant per fet que viurien en una xarxa de confiança, i cap dels set no forma part del parc que manté el departament de sistemes. Són el que va créixer al costat.

VulnCheck llegeix l'amplitud d'aquella llista com la signatura d'un escaneig massiu oportunista i no d'un atac dirigit, i té raó en el com. Nosaltres hi afegim el què, i ho diem marcat com a lectura nostra: l'escaneig oportunista explica la velocitat, no la selecció. Algú va decidir que valia la pena buscar aquestes coses, i el que l'escàner va trobar rendible buscar són eines internes que ningú no va signar. Que una d'elles acabés vivint dins d'un producte de Siemens és l'anècdota; el tema és que la majoria no viu dins de cap producte, sinó en una màquina d'algú.

El calendari tampoc no s'ha de llegir a l'inrevés. L'avís de Siemens és de l'11 d'agost; el primer atac recollit per l'esquer, del 30 d'octubre. Vuitanta dies. El que va passar enmig no ho ha publicat ningú, així que l'únic que es pot afirmar és que aquella és la primera explotació observada en públic, i que quan va arribar ho va fer de manera automatitzada i contra vuit coses alhora. Si algú va pensar que la seva empresa de trenta persones no interessa ningú, aquí no cal interessar. N'hi ha prou amb respondre a un escaneig.

Quan aquest 10,0 és un zero per a tu

Convé dir-ho encara que no ajudi a vendre res: si el teu Node-RED té adminAuth configurat i el seu port no surt de la xarxa interna, aquest 10,0 no et toca. De cap manera, ni amb matisos. Un deu de CVSS mesura el pitjor cas, i el pitjor cas aquí exigeix que l'editor sigui accessible i obert; treus qualsevol de les dues condicions i l'atac deixa d'existir. Val la pena comprovar-ho abans d'obrir un tiquet d'urgència, perquè la pressa en un sistema de producció industrial té el seu propi cost.

La pregunta que costa més de contestar de memòria és quants Node-RED hi ha encesos a casa teva ara mateix, i qui els va posar. El flux que algú va muntar fa tres anys perquè l'ERP avisés el magatzem continua funcionant, i precisament perquè continua funcionant ningú no hi ha tornat a entrar a mirar.

El cens que gairebé ningú no té escrit

Un inventari normal té una fila per servidor i una per llicència. El pegament no hi surt: no té factura, no té contracte de suport i sovint no té ni nom de DNS. Aquestes són les tres columnes que afegim quan entrem a mirar això. Nosaltres tenim un n8n autoallotjat per a tasques internes i el tractem així —inventariat, amb amo i amb finestra d'actualització—, no per disciplina, sinó per haver vist què passa quan no.

Columna Què s'hi escriu
Què és i on escolta Node-RED, n8n, Jenkins, un Grafana, un script a cron, un contenidor que algú va aixecar. Port, i si respon des de fora. Comprova-ho des de fora: la regla del tallafocs que creus tenir i la resposta que dona el port no sempre coincideixen.
Amb quins permisos corre L'usuari del procés i quines credencials guarda a dins per fer la seva feina. Una eina capaç d'executar ordres pertany al nivell de privilegi d'un administrador, encara que es gestioni com una aplicació web més. Si corre com a root, esbrina qui ho va decidir; l'habitual és que no ho decidís ningú.
Qui el va posar i qui el mira Un nom. Si la casella surt buida, aquella fila és la que cal mirar primer, abans que qualsevol CVSS. La que no té amo és la que ningú no actualitzarà.

Aquella tercera columna és la que ordena la feina, i explica per què aquest tipus de programari no apareix als escanejos: no es va comprar, així que no és a cap llista d'actius. És el mateix mecanisme del qual parlàvem a el programari que només fa servir el teu sector, i el mateix que fa que l'agent va apagar l'avís, no el vigilant quan s'automatitza alguna cosa sense decidir abans qui en respon.

Automatitzar bé consisteix que cada flux tingui amo, permisos acotats i un lloc on es vegi què fa, que és del que va la nostra automatització i IA. Treure la llista del que ja hi ha encès, amb les seves dependències i sense vendre llicències de res, és feina de consultoria. Si vols que ho mirem amb tu, hi ha el formulari de contacte.

L'atac es llegeix com un tutorial, i aquella és la part que costa d'encaixar: no va caldre entendre Node-RED millor del que l'entén qui va muntar el flux de les alertes del magatzem. El que va decidir el resultat va ser una línia comentada en un fitxer de configuració que ningú no havia tornat a obrir, dins d'una màquina que no figurava en cap inventari.

Fonts. Consultades el 3 de novembre del 2026. L'atac recollit per l'esquer el 30 d'octubre del 2026, l'estructura del flux de tres nodes, l'ordre del node exec, els destins /dev/shm/.b i /tmp/.kworker, les webshells amb nodes http in i function, la IP 4.201.105.116, els setze impactes entre el 30 d'octubre i l'1 de novembre, els 125 impactes contra vuit CVE en el conjunt dels seus esquers i la llista de sis productes (Apache Solr, Camunda, Gitea, MLflow, Traefik i Joomla) són de «Exploitation Targeting Node-RED, a Tool Embedded in ICS Products», de VulnCheck, que és també qui llegeix aquella amplitud com a escaneig massiu oportunista i no com a atac dirigit. L'identificador CVE-2026-58115, el 10,0 a CVSS 3.1 i 4.0, la frase citada del resum, el producte afectat —SIMATIC IoT2050 Advanced (6ES7647-0BA00-1YA2), totes les versions de l'Industrial OS anteriors a V4.3.4.1 amb Node-RED instal·lat—, la indicació d'actualitzar a V4.3.4.1 i les mitigacions provisionals són de l'avís SSA-834709 de Siemens ProductCERT, de l'11 d'agost del 2026, recollit per CISA com ICSA-26-237-03. Les dues frases sobre el valor per defecte de l'editor i la xarxa de confiança, i l'ajust adminAuth, són de la documentació oficial de Node-RED; què fa POST /flows i el comportament del tipus de desplegament full són de la referència de la seva API d'administració. El precedent de Pilz és CVE-2025-41656, assignat per CERT@VDE l'1 de juliol del 2025 amb 10,0 de CVSS. La cronologia de l'explotació la recull Help Net Security el 3 de novembre del 2026. Les cites es deixen en el seu anglès original perquè es puguin cercar literalment. Els vuitanta dies entre l'avís i el primer atac recollit són una resta nostra sobre aquelles dues dates, i no impliquen que no hi hagués activitat abans: impliquen que aquella és la primera observada públicament. La fotografia de la imatge social és «Control panel displays settings and data for industrial equipment», de Shixart1985, CC BY 2.0 via Wikimedia Commons.

Saps quines automatitzacions tens enceses i qui les va posar?

Traiem el cens amb tu: quin pegament hi ha muntat, des d'on s'hi pot arribar, amb quins permisos corre i quines credencials guarda. I decidim fila a fila, sense vendre't llicències de res.

Parlar amb everyWAN

Etiquetes:

Compartir:

Subscriu-te al nostre butlletí

Per rebre històries del món IT, novetats d'everyWAN i ofertes exclusives per a subscriptors, dona't d'alta a la nostra llista de correu

everyWAN
everyWAN