Image d’illustration générée par IA
Claude adapte un exploit RCE à un automate WAGO : un shellcode ARM exécuté sans authentification
Avec Claude, Forescout a adapté un exploit CVE-2021-31886 du WAGO 750-852 au 750-831, exécutant un shellcode ARM sans authentification via FTP.
Texte généré par intelligence artificielle, publié sans relecture humaine. Transparence IA
De l’exploit existant au code exécuté sur du matériel réel
Forescout Research, via Vedere Labs, a adapté avec l’aide de Claude un exploit d’exécution de code à distance à partir d’un automate WAGO vers un modèle différent. La démonstration a fonctionné sur du matériel réel, permettant l’exécution d’un shellcode ARM contrôlé par le chercheur, sans authentification préalable.
Le point de départ était un exploit déjà développé pour le WAGO 750-852. La cible choisie pour le portage était quant à elle un WAGO 750-831, équipé du firmware V01.04.16.
Claude a reçu trois éléments : l’ancien exploit, le binaire du firmware à analyser et le contrôleur physique. Le modèle pouvait utiliser un terminal, l’outil de reverse engineering Ghidra et interagir directement avec l’automate.
Les sessions ont commencé avec Claude Sonnet 4.6. Après l’échec des premières tentatives visant à obtenir une RCE, le travail s’est poursuivi avec Claude Opus 4.6.
Il ne s’agissait pas d’un processus autonome. Le chercheur a dû guider continuellement le modèle, évaluer les résultats et réorienter l’analyse. La phase finale a duré 8 heures et 32 minutes, pour un coût de 535,74 dollars en appels API.
Forescout a également relevé un aspect peu favorable à l’IA : le même chercheur aurait peut-être pu terminer le portage initial plus rapidement, à moindre coût et sans détruire l’appareil lors des expérimentations ultérieures.
CVE-2021-31886 cible la commande FTP USER
L’exploit exploite CVE-2021-31886, une vulnérabilité critique du serveur FTP du composant Nucleus NET, intégré au système d’exploitation temps réel Nucleus RTOS.
Le défaut consiste en un débordement de tampon sur la pile (stack-based buffer overflow) provoqué par une validation insuffisante de la longueur de la commande FTP USER. Siemens le classe également sous CWE-170, qui correspond à une gestion incorrecte de la terminaison NULL.
La vulnérabilité est accessible via TCP/21, avant l’authentification. Un attaquant n’a donc besoin ni d’identifiants ni de convaincre un opérateur d’effectuer une action. Le score est de CVSS 9.8, avec le vecteur :
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Les conséquences potentielles comprennent un déni de service et l’exécution de code à distance, avec un impact possible sur la confidentialité, l’intégrité et la disponibilité.
CVE-2021-31886 fait partie d’un groupe de 13 vulnérabilités baptisé NUCLEUS:13, rendu public en novembre 2021. L’avis Siemens ProductCERT SSA-044112 a été publié le 09/11/2021, puis mis à jour le 14/12/2021 en version V1.1.
Aucune indication ne fait état de l’ajout de CVE-2021-31886 au catalogue Known Exploited Vulnerabilities de la CISA, ni d’une éventuelle échéance fédérale de remédiation. La démonstration confirme toutefois l’existence d’un exploit fonctionnel en laboratoire.
Une recherche effectuée le 1er septembre n’a trouvé aucun dépôt GitHub identifié par son nom ou sa description avec CVE-2021-31886. Aucun résultat n’apparaissait non plus dans Exploit-DB ou Packet Storm. La vérification des métadonnées GitHub n’exclut toutefois pas que du code pertinent soit présent dans des dépôts portant d’autres noms.
La modification décisive : de QUIT à CWD, sans CRLF
Le portage nécessitait de surmonter une différence de comportement du WAGO 750-831. Lors du traitement normal d’une session FTP, l’appareil mettait à zéro 256 octets du tampon contrôlé par l’attaquant. Le payload était donc effacé avant de pouvoir être exécuté.
L’exploit d’origine pour le 750-852 utilisait une séquence composée de USER et QUIT. Claude a modifié le flux en remplaçant la seconde commande par CWD et en supprimant le terminateur CRLF.
Cette combinaison modifiait le chemin de traitement du serveur FTP. La requête n’était pas finalisée selon le comportement habituel et le tampon restait suffisamment intact pour permettre l’exécution du payload.
Après un premier résultat fondé sur un simple shellcode NOP, Claude a produit en 12 minutes deux payloads ARM aux effets observables :
- l’envoi de requêtes ICMP echo vers un système contrôlé par le chercheur ;
- la transmission d’un datagramme UDP contenant la chaîne
PWNED.
L’exécution avait lieu dans le contexte du callback de réception Ethernet. La démonstration prouve donc le contrôle du flux d’exécution et la capacité à générer du trafic réseau depuis l’automate.
Elle ne démontre toutefois pas, à elle seule, la manipulation du processus industriel, de la logique ladder ou de l’ensemble des fonctions applicatives du contrôleur. Cette étape nécessiterait des capacités supplémentaires ainsi qu’une connaissance spécifique de l’installation.
Au cours de l’analyse, Claude a également signalé un défaut potentiel distinct dans la boucle d’extraction des commandes FTP. La revue humaine a jugé plausible l’existence d’une vulnérabilité séparée, mais celle-ci ne possède aucun identifiant CVE et son exploitabilité n’a pas été démontrée.
Les appareils WAGO concernés et l’absence de mises à jour
La liste des produits vulnérables comprend de nombreux automates et coupleurs de bus de terrain WAGO reposant sur Nucleus V1 RTOS :
| Appareil | Versions concernées |
|---|---|
| WAGO 750-829 | FW16 et antérieures |
| WAGO 750-831/000-00x | FW14 et antérieures |
| WAGO 750-852 | FW16 et antérieures |
| WAGO 750-880/0xx-xxx | FW16 et antérieures |
| WAGO 750-881 | FW16 et antérieures |
| WAGO 750-882 | FW16 et antérieures |
| WAGO 750-885/0xx-xxx | FW16 et antérieures |
| WAGO 750-889 | FW16 et antérieures |
| WAGO 750-331 | FW16 et antérieures |
| WAGO 750-352/xxx-xxx | FW16 et antérieures |
Aucune mise à jour n’est disponible pour ces produits basés sur Nucleus V1 RTOS. Il existe également une lacune documentaire : les modèles 750-882 et 750-885/0xx-xxx figurent parmi les appareils vulnérables, mais pas dans le tableau de remédiation ni dans la section correspondante consacrée aux mesures d’atténuation. Leur état de correction n’est pas précisé.
La situation diffère pour d’autres produits Nucleus. Siemens recommande de mettre à jour Nucleus ReadyStart V3 vers la version V2017.02.4 ou une version ultérieure. Pour CVE-2021-31886, un correctif était déjà inclus dans les versions V2013.08.1 et ultérieures.
Pour Nucleus NET, toutes les versions sont concernées et aucune remédiation générale n’est prévue. Les utilisateurs doivent contacter le support Siemens ou l’équipe Nucleus. Pour Nucleus Source Code, toutes les versions nécessitent de la même manière un contact direct pour obtenir des correctifs et des mises à jour.
Le test C2 qui a rendu l’automate inutilisable
Une session ultérieure visait à transformer l’exploit en infrastructure de command-and-control. Au cours de cette tentative, le code a écrit dans une région mémoire mappée sur la mémoire flash, rendant l’automate définitivement inutilisable.
L’incident met en évidence une différence fondamentale entre l’utilisation d’agents d’IA sur des logiciels traditionnels et leur interaction avec des systèmes physiques. Une écriture incorrecte ne provoque pas nécessairement un simple crash récupérable : elle peut compromettre le firmware, la mémoire persistante ou le fonctionnement de l’équipement.
Le risque immédiat ne réside donc pas seulement dans la possibilité qu’un modèle mène une attaque de manière autonome. Même un agent autorisé, guidé par un opérateur, peut mal interpréter une structure mémoire et exécuter des actions irréversibles.
Parallèlement, l’avis conjoint AA26-231A de la CISA, de la NSA, du FBI, du DOE et de l’EPA décrit une menace active visant des automates programmables, qui ne se limite pas à l’écosystème Siemens. Les acteurs observés utilisent des scripts d’exploitation générés ou assistés par l’IA, parfois dissimulés sous l’apparence d’outils légitimes de supervision OT.
Des services tels que Censys et ZoomEye servent à repérer les contrôleurs exposés à Internet. Dans le cas des Siemens S7, les outils associent Python à snap7.dll ou python-snap7, permettant des opérations de lecture et d’écriture via S7comm.
L’activité, signalée dans l’avis du 19 août, a été considérée comme probablement orientée vers la reconnaissance persistante et le développement de capacités. Elle n’a pas été attribuée à un groupe spécifique.
Mesures de défense immédiates et signaux à rechercher sur le réseau OT
Pour les WAGO qui ne disposent d’aucune mise à jour, la mesure prioritaire consiste à désactiver FTP lorsqu’il n’est pas indispensable. À défaut, il convient de bloquer ou de filtrer TCP/21, en empêchant surtout toute exposition directe sur Internet.
Les exploitants devraient également :
- inventorier les automates, les firmwares et les services actifs ;
- segmenter les réseaux IT, OT et les postes d’ingénierie ;
- limiter les accès distants des fournisseurs et des intégrateurs système ;
- surveiller les modifications effectuées en dehors des fenêtres autorisées ;
- préparer des procédures de restauration compatibles avec les contrôleurs déployés ;
- vérifier l’intégrité des configurations et des programmes industriels.
Sur le trafic FTP, il convient de surveiller les requêtes USER anormalement longues, les séquences inhabituelles associant QUIT ou CWD, ainsi que les terminateurs CRLF absents ou manipulés. Les requêtes ICMP vers des hôtes externes et les datagrammes UDP contenant PWNED sont des indicateurs spécifiques de la démonstration en laboratoire, et non d’une campagne criminelle connue.
Dans les environnements Siemens S7, il faut également rechercher les accès S7comm depuis des hôtes non autorisés, les scans séquentiels du port 102, l’énumération des CPU et les écritures dans les blocs de données en dehors des horaires habituels. La présence de Snap7.dll ou de scripts Python exploitant les fonctions S7comm sur des systèmes autres que les postes d’ingénierie approuvés doit faire l’objet d’une vérification immédiate.
La démonstration sur WAGO ne prouve pas que l’IA puisse remplacer un chercheur expérimenté. Elle montre toutefois qu’un modèle disposant d’outils, d’un firmware et d’un accès à la cible peut contribuer à transformer une vulnérabilité documentée en code fonctionnel sur un automate réel.
Sources
Cet article est une réécriture originale fondée sur les sources ci-dessous.
CVE traitées dans cet article
- 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
