Un'AI ha portato un exploit pre-auth su PLC per 535 dollari: l'esperimento WAGO di Forescout
Forescout ha usato Claude per portare un exploit RCE pre-auth (CVE-2021-31886) tra due modelli di PLC WAGO per 535 dollari in meno di un giorno. Cosa significa il crollo del costo dell'exploit per chi difende l'OT e non può fare la patch.
Il numero interessante nell'ultima ricerca di Forescout non è il punteggio CVSS. È 535,74 dollari. È quanto è costato, in consumo di API, far portare a Claude un exploit funzionante di remote code execution pre-autenticazione da un PLC WAGO a un modello diverso — un dispositivo che gira su un sistema operativo real-time a fine vita, senza fix del firmware e senza che ne arriverà mai uno. Il port ha richiesto otto ore e mezza di sessione, gran parte delle quali un umano a rimettere il modello sulla strada giusta dopo i vicoli ciechi. È finito con l'AI che scriveva shellcode ARM capace di richiamare casa via ICMP e UDP dodici minuti dopo la prima esecuzione di codice e poi, in una run successiva non supervisionata, con la distruzione permanente del controllore per una scrittura in memoria flash.
Niente di tutto questo è fantascienza e — ed è la parte su cui vale la pena fermarsi — niente di tutto questo è nemmeno particolarmente impressionante per ora. Forescout ha intitolato l'analisi "Can AI Create PLC Attacks? Yes, But It's Not That Easy Yet", e l'onestà è il punto. Un tecnico esperto avrebbe fatto questo port più in fretta oggi, senza il modello. Ciò che è cambiato è la forma della curva di costo, e la curva di costo è ciò su cui chi difende costruisce davvero il proprio budget.
Cosa hanno fatto i Vedere Labs di Forescout
Il bersaglio era CVE-2021-31886, uno stack buffer overflow pre-autenticazione nel server FTP che accompagna il Nucleus RTOS di Siemens. Il servizio FTP non valida la lunghezza dello username inviato nel comando USER sulla porta TCP 21; uno username sovradimensionato sovrascrive lo stack e permette all'attaccante di dirottare l'esecuzione. Siemens gli ha assegnato un CVSS di 9,8. È raggiungibile prima di qualsiasi login e — poiché i dispositivi Nucleus V1 interessati sono a fine vita — l'avviso di CERT@VDE non indica alcun aggiornamento firmware per una lunga lista di controllori WAGO: 750-829, 750-831, 750-852, 750-881, 750-882, 750-885, 750-889, 750-331 e 750-352, tra gli altri.
I ricercatori di Forescout avevano già un exploit funzionante per il WAGO 750-852. L'esperimento era circoscritto e concreto: un modello di frontiera poteva portare quell'exploit su un 750-831 con firmware V01.04.16, un bersaglio affine ma non identico? Il flusso di lavoro è stato questo:
| Fase | Cosa è successo |
|---|---|
| Analisi | Claude Sonnet 4.6 (contesto 200k) ha usato Ghidra, Python su misura e probing dal vivo per trovare il percorso FTP vulnerabile e confermare il crash sul nuovo firmware |
| Sviluppo RCE | Passaggio a Claude Opus 4.6 (contesto 1M) dopo che i primi tentativi si erano arenati |
| L'intuizione chiave | Il normale processing USER→QUIT azzerava il buffer controllato dall'attaccante prima che la shellcode partisse; Claude ha cambiato la sequenza in USER→CWD eliminando il terminatore CRLF, così il payload sopravviveva |
| Payload | Beacon ARM ICMP e UDP funzionanti, prodotti ~12 minuti dopo la prima esecuzione di codice |
| Costo | 535,74 dollari; ~2,6k token in input, ~1,3M in output |
| Tempo | 8 ore e 32 minuti su più sessioni |
| Danno collaterale | Un successivo tentativo di impianto C2 ha scritto in memoria mappata su flash e ha distrutto permanentemente il dispositivo |
Il modello ha fatto bene la parte noiosa — inseguire offset, indirizzi di funzione, punti di callback e zone di memorizzazione della shellcode in un'immagine firmware sconosciuta. Ha fatto male la parte di giudizio. Ha inseguito per ore ipotesi sbagliate sulla sopravvivenza del payload, ha identificato male funzioni e catene di chiamata e ha ripetutamente avuto bisogno che un ricercatore gli passasse il contesto del disassemblato e lo riportasse verso il vero punto di innesco. Lasciato senza supervisione vicino alla memoria flash, ha distrutto l'hardware.
Perché "non è ancora così facile" è proprio la frase che deve preoccupare
Verrebbe da leggere le riserve come una rassicurazione. È la lettura sbagliata. L'inquadramento di Forescout è che il vincolo si sta erodendo, non che sia stabile:
La domanda più importante è cosa succede quando la quantità di intervento esperto richiesto continua a calare. Un ricercatore umano può parallelizzare questo lavoro, ma l'AI ha il potenziale di ridurne il costo marginale su molti bersagli affini in una volta sola.
Costo marginale è l'espressione operativa. Uno sviluppatore di exploit senior in grado di portare un overflow FTP Nucleus tra le varianti WAGO è una risorsa scarsa e costosa, e il suo tempo non si parallelizza: una persona, un bersaglio alla volta. Il valore di un'AI nel loop non è che sia migliore di quella persona. È che trasforma una competenza scarsa in qualcosa di più vicino a un costo fisso, da lanciare contro quaranta dispositivi affini contemporaneamente. 535 dollari per un port sono cari per bersaglio oggi. Sono nulla come costo per bersaglio su un'intera famiglia di prodotti, e calano a ogni generazione di modelli.
È lo stesso spostamento che il governo statunitense ha descritto tre settimane prima dal lato attaccante. Nell'avviso congiunto AA26-231A (19-08-2026), NSA, CISA, FBI, DOE ed EPA hanno avvertito che gli attori di minaccia stanno già usando script Python generati da AI — che avvolgono la libreria open-source python-snap7 per parlare S7comm sulla porta TCP 102 — per ricognizione e sviluppo di capacità contro PLC Siemens S7 esposti su Internet in ambito idrico, energetico, manifatturiero e chimico. Abbiamo trattato quell'avviso in Exploit generati da AI contro i PLC Siemens S7. AA26-231A è il segnale di policy che l'AI abbassa l'asticella della competenza sui protocolli OT; l'esperimento WAGO di Forescout è la misura da banco di quanto in basso, e a che prezzo.
La classe di bersagli è tutto il problema
Uniamo le due cose e il quadro è specifico, non vago. I dispositivi più esposti al porting di exploit assistito da AI sono esattamente quelli che non puoi patchare il secondo martedì del mese:
- Non esiste un fix. CVE-2021-31886 non ha alcun aggiornamento firmware Nucleus V1. La risposta del vendor sono i controlli compensativi, non una patch.
- Non si riavviano. Un PLC che governa una pompa, una valvola o un processo di miscelazione ha un uptime misurato in anni. "Pianificare una finestra di manutenzione" è una discussione da fermo impianto, non un ticket di change.
- La disponibilità è il gioiello della corona. In IT, lo scenario peggiore di un exploit maldestro è un servizio in crash. In OT, il controllore distrutto da Forescout è l'avvertimento: "Gli errori smettono di essere confinati alla cattiva analisi o al codice che fallisce. Possono colpire il dispositivo stesso." Un exploit che fallisce in modo rumoroso può anche fermare un sistema di sicurezza di processo.
- La superficie d'attacco è legacy per costruzione. FTP in chiaro sulla porta 21, su un controllore, nel 2026, non è un'anomalia: è il modo in cui è stata costruita un'enorme base installata.
L'istinto difensivo per un CVE del 2021 con "elevata complessità d'attacco" era archiviarlo sotto un giorno. Quell'istinto dava per scontato che la complessità fosse un fossato duraturo. Il risultato di Forescout è una misura diretta del fatto che non lo è.
Remediation
CVE-2021-31886 non ha una patch, quindi questo è un runbook di controlli compensativi, non una nota "aggiorna la versione". L'obiettivo è rendere irraggiungibile la superficie FTP, sorvegliare il filo per la firma dello sfruttamento e trattare ogni sospetto come un incidente di disponibilità.
1. Sono interessato?
Inventaria i controllori basati su Nucleus RTOS con un servizio FTP esposto. Da un host di gestione autorizzato sulla rete OT:
# Enumera FTP raggiungibile sulla VLAN del PLC (solo scansione autorizzata)
nmap -Pn -p21 --open -sV 10.20.0.0/24
# Banner-grab per individuare specificamente l'FTP Nucleus
for ip in $(nmap -Pn -p21 --open -oG - 10.20.0.0/24 | awk '/21\/open/{print $2}'); do
printf 'Controllo %s\n' "$ip"; (printf 'USER anonymous\r\n'; sleep 1) | nc -w3 "$ip" 21
done
Incrocia l'elenco dei modelli con CERT@VDE VDE-2021-050 (WAGO 750-829/831/852/881/882/885/889/331/352 e la più ampia flotta Nucleus V1). Qualsiasi cosa risponda in FTP sulla 21 e ricada in quella lista è in perimetro. Punto critico: uno di questi su un indirizzo esposto a Internet è un'emergenza, non una voce di backlog.
2. Patch — versioni corrette esatte
Non esiste un firmware corretto per i dispositivi Nucleus V1 interessati; la guida del vendor è la mitigazione. Dove un controllore ha un firmware successore supportato o un percorso di migrazione a Nucleus 4, pianificalo — ma non aspettarlo per i controlli qui sotto.
3. Non puoi patchare? Controlli compensativi (è questo il vero fix)
- Disabilita l'FTP sul controllore dove la piattaforma lo consente. Se il servizio non gira, l'overflow non è raggiungibile. Fai lo stesso per Telnet e per qualsiasi interfaccia web di amministrazione inutilizzata.
- Blocca la porta 21 al confine della cella/zona. Imponi una ACL in allow-list così che solo un host di ingegneria nominato possa raggiungere le porte di gestione del PLC, secondo la segmentazione a modello Purdue che (dovresti) già avere. Nessun FTP dovrebbe mai attraversare da IT a OT, e mai da Internet.
- Sostituisci l'accesso VPN piatto con un accesso remoto brokered a privilegio minimo. Una singola VPN del fornitore che atterra sulla VLAN del PLC è esattamente il percorso che AA26-231A descrive gli attaccanti cavalcare.
- Rate-limit / scarta l'FTP malformato. Dove esiste un firewall OT-aware o un filtro di protocollo, allerta su argomenti
USERoltre una lunghezza ragionevole e su unUSERnon seguito da un normalePASS.
4. Cerca la compromissione (la rete è la superficie di monitoraggio)
Non puoi installare un agent su un PLC. La detection vive sul filo e nel comportamento del dispositivo stesso. Cerca:
- Sequenze di comandi FTP anomale — un
USERseguito daCWDsenza terminatore CRLF, argomentiUSERsovradimensionati, o trafficoUSERverso un controllore che non ha motivo di ricevere FTP interattivo. È la firma letterale della tecnica di Forescout. - Crash ripetuti o riavvii non programmati di un controllore — la spia visibile dei tentativi di overflow che mancano il bersaglio.
- Beacon in uscita inattesi da un PLC — echo ICMP o UDP verso un host esterno o interno mai visto da un dispositivo che dovrebbe parlare solo con i suoi peer HMI/SCADA. Il primo atto del payload portato è stato un beacon ICMP/UDP.
Mappa l'attività per il tuo SOC con MITRE ATT&CK for ICS: T0866 Exploitation of Remote Services (l'overflow FTP pre-auth), T0819 Exploit Public-Facing Application (controllori esposti su Internet), T0814 Denial of Service / T0816 Device Restart-Shutdown (il comportamento di crash/brick) e T0885 Commonly Used Port (C2 su ICMP/UDP).
5. Eradica + verifica
- Tratta un controllore sospettato di sfruttamento come un incidente di disponibilità: passa a un PLC ridondante o a uno stato sicuro manuale prima di toccarlo, perché sondare un dispositivo compromesso o danneggiato da un overflow può a sua volta distruggerlo.
- Per un controllore distrutto, il ripristino è fisico — riprogramma da un'immagine firmware nota buona o sostituisci l'unità; non c'è un percorso pulito di "termina il processo" sul dispositivo.
- Dopo il ripristino, conferma che la superficie FTP sia davvero sparita (ripeti il controllo sulla porta 21 e verifica che non risponda), rivedi le ACL di zona e ruota qualsiasi credenziale che abbia attraversato la stessa rete di ingegneria.
Ricalibrare il rischio: difficoltà non è sicurezza
La raccomandazione più utile di Forescout non è affatto un controllo — è un cambio di scoring. La loro indicazione è smettere di deprioritizzare le vulnerabilità sulla base della difficoltà invece che della sfruttabilità, perché l'AI sta costantemente convertendo la prima nella seconda. "Difficile da sfruttare" è sempre stata una scommessa sul fatto che un attaccante non avrebbe speso il mese di uno specialista sul tuo dispositivo specifico. Quando lo specialista è una sessione di API da 535 dollari che gira in parallelo su tutta la tua famiglia di prodotti, le quote di quella scommessa sono cambiate e il tuo backlog non se n'è accorto.
È questa la domanda operativa che l'esperimento pone a chi difende: se un attaccante può portare un RCE pre-auth sul tuo firmware esatto e non patchabile per il prezzo di un portatile, quando hai confermato l'ultima volta — sui tuoi dispositivi reali — se quell'exploit funziona? Rispondere una volta l'anno in un pentest circoscritto significa rispondere a una domanda che si è già spostata.
È il problema per cui è costruito il pilastro AI Generative Pentest di Zero Hunt, e il motivo per cui facciamo girare il motore offensivo dal lato di chi difende. Lo swarm da 10 agenti scrive codice di exploit per bersaglio con un LLM locale — non una ricerca su ExploitDB, che per CVE-2021-31886 non restituisce nulla, dato che nessun exploit pubblico esiste — così può tentare la stessa adattamento cross-modello che Forescout ha dimostrato, contro i tuoi controllori reali, con una cadenza attivata dai cambiamenti invece che annuale. Ogni skill candidata viene ritestata nell'AI Gym prima di toccare un asset di produzione, e ogni finding è firmato con ECDSA al momento della scrittura, così "abbiamo validato che questo dispositivo è / non è sfruttabile" è un record difendibile, non uno screenshot. Poiché l'appliance è 100% on-prem con supporto air-gap e nessuna chiamata a LLM esterni, gira dentro la rete OT segmentata dove i PLC vivono davvero — l'unico posto che uno scanner cloud non può raggiungere.
Per i dispositivi che confermi di non poter sistemare, la validazione deve passare la mano alla detection, ed è AI Traffic Analysis: un modello di deep learning con quattro teste di inferenza, addestrato su miliardi di sequenze PCAP, che gira sulla GPU dell'appliance dentro il segmento OT. Sta cercando esattamente gli artefatti della sezione hunting qui sopra — la sequenza FTP malformata, il controllore che improvvisamente fa beacon in uscita via ICMP, il pattern di crash ripetuti — mentre l'attività accade, non nel digest SIEM del mattino dopo. Quando la vulnerabilità non ha patch e il dispositivo non ha agent, la rete è l'unica superficie che ti resta, ed è quella che l'exploit portato da Forescout ha illuminato per prima.