Immagine illustrativa generata con AI
Claude adatta un exploit RCE a un PLC WAGO: shellcode ARM eseguito senza autenticazione
Claude adatta exploit RCE CVE-2021-31886 da WAGO 750-852 a 750-831: overflow FTP Nucleus NET senza autenticazione, shellcode ARM eseguito su hardware.
Testo generato da intelligenza artificiale, pubblicato senza revisione umana. Trasparenza IA
Dall’exploit esistente al codice eseguito su hardware reale
Forescout Research, attraverso Vedere Labs, ha adattato con l’assistenza di Claude un exploit di remote code execution da un PLC WAGO a un modello differente. La prova ha funzionato su hardware reale, consentendo l’esecuzione di shellcode ARM controllato dal ricercatore senza autenticazione preventiva.
Il punto di partenza era un exploit già sviluppato per il WAGO 750-852. Il bersaglio scelto per il porting era invece un WAGO 750-831, equipaggiato con firmware V01.04.16.
A Claude sono stati messi a disposizione tre elementi: il vecchio exploit, il binario del firmware da analizzare e il controller fisico. Il modello poteva utilizzare un terminale, il reverse engineering tool Ghidra e interagire direttamente con il PLC.
Le sessioni sono iniziate con Claude Sonnet 4.6. Dopo che i primi tentativi di ottenere l’RCE si erano arenati, il lavoro è proseguito con Claude Opus 4.6.
Non si è trattato di un processo autonomo. Il ricercatore ha dovuto guidare continuamente il modello, valutare i risultati e correggere la direzione dell’analisi. La fase finale è durata 8 ore e 32 minuti, consumando 535,74 dollari di API.
Forescout ha inoltre rilevato un aspetto poco favorevole all’AI: lo stesso ricercatore avrebbe forse potuto completare il porting iniziale più rapidamente, spendendo meno e senza distruggere il dispositivo durante gli esperimenti successivi.
CVE-2021-31886 colpisce il comando FTP USER
L’exploit sfrutta CVE-2021-31886, una vulnerabilità critica nel server FTP del componente Nucleus NET, integrato nel sistema operativo real-time Nucleus RTOS.
Il difetto consiste in uno stack-based buffer overflow causato dalla validazione insufficiente della lunghezza del comando FTP USER. Siemens lo classifica anche come CWE-170, cioè gestione impropria della terminazione NULL.
La vulnerabilità è raggiungibile attraverso TCP/21 prima dell’autenticazione. Un aggressore non deve quindi possedere credenziali né convincere un operatore a compiere un’azione. Il punteggio è CVSS 9.8, con vettore:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Le conseguenze previste comprendono denial of service ed esecuzione remota di codice, con impatto potenziale su riservatezza, integrità e disponibilità.
CVE-2021-31886 appartiene al gruppo di 13 vulnerabilità chiamato NUCLEUS:13, reso pubblico nel novembre 2021. L’advisory Siemens ProductCERT SSA-044112 è stato pubblicato il 2021-11-09 e aggiornato il 2021-12-14 alla versione V1.1.
Non sono disponibili indicazioni sull’inserimento di CVE-2021-31886 nel catalogo Known Exploited Vulnerabilities della CISA, né su un’eventuale scadenza federale di remediation. La dimostrazione prova comunque l’esistenza di un exploit funzionante in laboratorio.
Una ricerca eseguita il 1 settembre non ha trovato repository GitHub identificati dal nome o dalla descrizione con CVE-2021-31886. Non risultavano risultati neppure in Exploit-DB o Packet Storm. Il controllo sui metadati GitHub non esclude, tuttavia, che codice pertinente sia contenuto in repository con nomi diversi.
La modifica decisiva: da QUIT a CWD, senza CRLF
Il porting richiedeva di superare una differenza nel comportamento del WAGO 750-831. Durante la normale gestione della sessione FTP, il dispositivo azzerava 256 byte del buffer controllato dall’attaccante. Il payload veniva quindi cancellato prima di poter essere eseguito.
L’exploit originario per il 750-852 utilizzava una sequenza composta da USER e QUIT. Claude ha modificato il flusso sostituendo il secondo comando con CWD e rimuovendo il terminatore CRLF.
Questa combinazione alterava il percorso di elaborazione del server FTP. La richiesta non veniva completata secondo il comportamento consueto e il buffer rimaneva integro abbastanza a lungo da consentire l’esecuzione del payload.
Dopo il primo risultato, basato su un semplice shellcode NOP, Claude ha prodotto in 12 minuti due payload ARM con effetti osservabili:
- invio di richieste ICMP echo verso un sistema controllato dal ricercatore;
- trasmissione di un datagramma UDP contenente la stringa
PWNED.
L’esecuzione avveniva nel contesto della callback di ricezione Ethernet. La prova dimostra quindi controllo del flusso di esecuzione e capacità di generare traffico di rete dal PLC.
Non dimostra invece, da sola, la manipolazione del processo industriale, della ladder logic o delle funzioni applicative complete del controller. Quel passaggio richiederebbe ulteriori capacità e una conoscenza specifica dell’impianto.
Durante l’analisi, Claude ha anche segnalato un possibile difetto separato nel ciclo di estrazione dei comandi FTP. La revisione umana ha ritenuto plausibile l’esistenza di una vulnerabilità distinta, ma il problema non possiede un identificativo CVE e non ne è stata dimostrata la sfruttabilità.
I dispositivi WAGO coinvolti e l’assenza di aggiornamenti
L’elenco dei prodotti vulnerabili comprende numerosi PLC e fieldbus coupler WAGO basati su Nucleus V1 RTOS:
| Dispositivo | Versioni interessate |
|---|---|
| WAGO 750-829 | FW16 e precedenti |
| WAGO 750-831/000-00x | FW14 e precedenti |
| WAGO 750-852 | FW16 e precedenti |
| WAGO 750-880/0xx-xxx | FW16 e precedenti |
| WAGO 750-881 | FW16 e precedenti |
| WAGO 750-882 | FW16 e precedenti |
| WAGO 750-885/0xx-xxx | FW16 e precedenti |
| WAGO 750-889 | FW16 e precedenti |
| WAGO 750-331 | FW16 e precedenti |
| WAGO 750-352/xxx-xxx | FW16 e precedenti |
Per questi prodotti basati su Nucleus V1 RTOS non sono disponibili aggiornamenti. Esiste inoltre una lacuna documentale: i modelli 750-882 e 750-885/0xx-xxx figurano tra i dispositivi vulnerabili, ma non nella tabella di remediation e nella relativa sezione sulle mitigazioni. Il loro stato di correzione non è specificato.
La situazione varia per altri prodotti Nucleus. Siemens indica di aggiornare Nucleus ReadyStart V3 a V2017.02.4 o successiva. Per CVE-2021-31886, una correzione era già inclusa nelle release V2013.08.1 e successive.
Per Nucleus NET, invece, risultano coinvolte tutte le versioni e non è prevista una remediation generale. Gli utilizzatori devono rivolgersi al supporto Siemens o al team Nucleus. Per Nucleus Source Code, tutte le versioni richiedono analogamente un contatto diretto per patch e aggiornamenti.
Il test C2 che ha reso inutilizzabile il PLC
Una sessione successiva mirava a trasformare l’exploit in un impianto di command-and-control. Durante il tentativo, il codice ha scritto in una regione di memoria mappata sulla flash e ha reso il PLC permanentemente inutilizzabile.
L’incidente evidenzia una differenza sostanziale tra l’uso di agenti AI sul software tradizionale e l’interazione con sistemi fisici. Una scrittura errata non produce necessariamente soltanto un crash recuperabile: può compromettere firmware, memoria persistente o funzionamento dell’apparecchiatura.
Il rischio immediato non è quindi soltanto quello di un modello che conduce autonomamente un attacco. Anche un agente autorizzato, guidato da un operatore, può interpretare male una struttura di memoria ed eseguire azioni irreversibili.
Parallelamente, l’advisory congiunto AA26-231A di CISA, NSA, FBI, DOE ed EPA descrive una minaccia attiva contro PLC, non limitata al solo ecosistema Siemens. Gli attori osservati impiegano script di exploitation generati o assistiti dall’AI, talvolta mascherati da strumenti legittimi di monitoraggio OT.
Servizi come Censys e ZoomEye vengono usati per individuare controller esposti a Internet. Nel caso dei Siemens S7, gli strumenti combinano Python con snap7.dll o python-snap7, ottenendo capacità di lettura e scrittura attraverso S7comm.
L’attività, segnalata nell’advisory del 19 agosto, è stata valutata come probabilmente orientata alla ricognizione persistente e allo sviluppo di capacità. Non è stata attribuita a uno specifico gruppo.
Difese immediate e segnali da cercare sulla rete OT
Per i WAGO privi di aggiornamenti, la misura prioritaria è disabilitare FTP quando non indispensabile. In alternativa, occorre bloccare o filtrare TCP/21, impedendo soprattutto qualsiasi esposizione diretta verso Internet.
I gestori dovrebbero inoltre:
- inventariare PLC, firmware e servizi attivi;
- separare reti IT, OT e workstation di engineering;
- limitare gli accessi remoti di fornitori e system integrator;
- monitorare le modifiche fuori dalle finestre autorizzate;
- predisporre procedure di ripristino compatibili con i controller installati;
- verificare l’integrità delle configurazioni e dei programmi industriali.
Sul traffico FTP meritano attenzione richieste USER anormalmente lunghe, sequenze insolite con QUIT o CWD e terminatori CRLF assenti o manipolati. Richieste ICMP verso host esterni e datagrammi UDP contenenti PWNED sono indicatori specifici della prova di laboratorio, non di una campagna criminale conosciuta.
Negli ambienti Siemens S7 vanno cercati anche accessi S7comm da host non autorizzati, scansioni sequenziali sulla porta 102, enumerazioni della CPU e scritture sui data block fuori orario. La presenza di Snap7.dll o script Python con funzioni S7comm su sistemi diversi dalle workstation di engineering approvate richiede verifica immediata.
La dimostrazione WAGO non prova che l’AI possa sostituire un ricercatore esperto. Mostra però che un modello, se dotato di strumenti, firmware e accesso al bersaglio, può contribuire a trasformare una vulnerabilità documentata in codice funzionante su un PLC reale.
Fonti
Questo articolo è una rielaborazione originale basata sulle fonti seguenti.
CVE trattate in questo articolo
- CVE-2021-31886CRITICAL9.8A vulnerability has been identified in APOGEE MBC (PPC) (BACnet) (All versions), APOGEE MBC (PPC) (P2 Ethernet) (All versions), APOGEE MEC (PPC) (BACnet) (All versions), APOGEE MEC (PPC) (P2 Ethernet) (All versions), APOGEE PXC Compact (BACnet) (All versions < V3.5.4), APOGEE PXC Compact (P2 Etherne
- CVE-2021-31884CRITICAL9.8A vulnerability has been identified in APOGEE MBC (PPC) (BACnet) (All versions), APOGEE MBC (PPC) (P2 Ethernet) (All versions), APOGEE MEC (PPC) (BACnet) (All versions), APOGEE MEC (PPC) (P2 Ethernet) (All versions), APOGEE PXC Compact (BACnet) (All versions < V3.5.4), APOGEE PXC Compact (P2 Etherne
- CVE-2021-31346HIGH8.2A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303), PLUSCONTROL 1st Gen (All versions), SIMOTICS CONNECT 400 (All versions < V0.5.0.0), SIMOTICS CONNECT 400 (All versions < V1.0.0.0). The total length o
- CVE-2021-31345HIGH7.5A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303), PLUSCONTROL 1st Gen (All versions). The total length of an UDP payload (set in the IP header) is unchecked. This may lead to various side effects, inc
- CVE-2021-31881HIGH7.1A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303). When processing a DHCP OFFER message, the DHCP client application does not validate the length of the Vendor option(s), leading to Denial-of-Service c
- CVE-2021-31883HIGH7.1A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303). When processing a DHCP ACK message, the DHCP client application does not validate the length of the Vendor option(s), leading to Denial-of-Service con
- CVE-2021-31882MEDIUM6.5A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303). The DHCP client application does not validate the length of the Domain Name Server IP option(s) (0x06) when processing DHCP ACK packets. This may lead
- CVE-2021-31344MEDIUM5.3A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303), PLUSCONTROL 1st Gen (All versions), SIMOTICS CONNECT 400 (All versions < V0.5.0.0), SIMOTICS CONNECT 400 (All versions < V1.0.0.0). ICMP echo packets
